1.Socket机制
A:通信两端都应该有Socket对象
B:所有的通信都是通过Socket间的IO进行操作的
2.Socket通信原理图解
3.UDP协议下发送接收数据
发送:
创建UDP发送端的Socket对象
DatagramSocket ds = new DatagramSocket();
创建数据并把数据打包
byte[] bys = "hello,udp,我来了".getBytes();
// 长度
int length = bys.length;
// IP地址对象
InetAddress address = InetAddress.getByName("192.168.12.92");
// 端口
int port = 10086;
DatagramPacket dp = new DatagramPacket(bys, length, address, port);
发送数据
ds.send(dp);
释放资源
ds.close()
接收:
创建UDP接收端的Socket对象
DatagramSocket ds = new DatagramSocket(10086);
创建数据包用于接收数据
byte[] bys = new byte[1024];
int length = bys.length;
DatagramPacket dp = new DatagramPacket(bys, length);
接收数据
ds.receive(dp); // 阻塞式
解析数据包
// public InetAddress getAddress()
InetAddress address = dp.getAddress();
String ip = address.getHostAddress();
// public byte[] getData():获取数据缓冲区
// public int getLength():获取数据的实际长度
byte[] bys2 = dp.getData();
int len = dp.getLength();
String s = new String(bys2, 0, len);
System.out.println(ip + "传递的数据是:" + s);
释放资源
ds.close();
4.TCP协议下发送接收数据
发送:
创建TCP客户端的Socket对象
Socket s = new Socket("192.168.12.92", 8888);
获取输出流,写数据
OutputStream os = s.getOutputStream();
os.write("hello,tcp,我来了".getBytes());
释放资源
s.close()
接收:
创建TCP服务器端的Socket对象
ServerSocket ss = new ServerSocket(8888);
监听客户端连接
Socket s = ss.accept();
获取输入流,读取数据InputStream is = s.getInputStream();
byte[] bys = new byte[1024];
int len = is.read(bys); // 阻塞式方法
String str = new String(bys, 0, len);
String ip = s.getInetAddress().getHostAddress();
System.out.println(ip + "---" + str);
释放资源
s.close()