黑马程序员技术交流社区
标题:
TCP简单通信
[打印本页]
作者:
fmi110
时间:
2015-8-12 14:46
标题:
TCP简单通信
网络编程
/*
TCP:客户端(Client)首先与服务端(Server)建立连接,形成通道(即IO流),
然后数据可以在通道之间进行传输,并且单个Server端可以同时与多个Client通信
Socket:建立客户端
ServerSocket:建立服务器端
TCP客户端:客户端需要明确服务器端的ip地址和端口号,才能尝试建立连接,如果连接失败,
会出现异常。
连接成功,则通道Socket建立,可以通过IO流,进行数据传输,Socket提供了输入和输出流,
可通过方法 getInputStream() getOutputStream()获取
与服务器通讯结束后,要关闭Socket
TCP服务器端:
服务器需要明确它所接收的数据是从哪个端口进入的。
当有客户端访问是,要明确是哪个客户端,可通过 accept()获取已连接的客户端对象,并
通过该对象与客户端通过IO流进行数据数据传输。
当该客户端访问结束,关闭该客户端。
*/
/*练习:TCP通讯演示,客户端发送消息,服务器收到消息后,回复一条消息*/
import java.io.*;
import java.net.*;
class ClientDemo
{
public static void main(String[] args) throws Exception
{
//1 建立Soket,连接服务器地址和端口
Socket socket = new Socket("192.168.31.1",10002);
// Socket socket = new Socket(InetAddress.getByName("192.168.31.1"),10002);
//2 获取Socket输出流
OutputStream out = socket.getOutputStream();
//3 使用输出流 将指定数据写出去
//与UDP不同,发送的数据不需要封装到包中
out.write("Hello TCP!!".getBytes());
out.flush(); //刷新数据流
//4 获取Socket输入流,接收返回想信息
InputStream in = socket.getInputStream();
byte[] bufin = new byte[1024];
int len = in.read(bufin);//获取返回数据长度
String msg = new String(bufin,0,len);
String ip = socket.getInetAddress().getHostName();
String name = socket.getInetAddress().getHostAddress();
System.out.println(ip+":"+msg);
//5 关闭连接
socket.close();
}
}
class ServerDemo
{
public static void main(String[] a) throws Exception
{
//1 建立ServerSocket,获取客户端的连接
ServerSocket ss = new ServerSocket(10002);//需要明确监听端口
//2 获取Socket 的IO 流
Socket s = ss.accept();
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
//3 接收客户端信息
byte[] buf = new byte[1024];
int len = in.read(buf);
String msg = new String(buf,0,len);
//获取客户端地址
String ip = s.getInetAddress().getHostAddress();
System.out.println("Client::"+ip+"::"+msg);
//4 回复消息
out.write("消息收到!!".getBytes());
out.flush();
//5 关闭连接
s.close();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2