什么是Socket
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。
使用UDP协议编写Socket
UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议
UDP缺点:不可靠,不稳定
因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。
UDP编程主要用到两个类DatagramPacket和DatagramSocket
具体代码:
服务端:
1 package cn.socket;
2
3 import java.net.DatagramPacket;
4
5 import java.net.DatagramSocket;
6 import java.net.InetAddress;
7
8
9 public class ServiceSocket {
10 /*
11 *接收客户端发送的信息
12 */
13 public static void main(String[] args) throws Exception {
14 //创建sockpt对象,并传入端口号 与客户端对应
15 DatagramSocket ds=new DatagramSocket(120);
16 //接收数据
17 byte [] by=new byte[1024];
18 int length=by.length;
19 DatagramPacket dp=new DatagramPacket(by, length);
20 ds.receive(dp);
21 //获取IP地址
22 byte [] bys=dp.getData();
23 int le=dp.getLength();
24 InetAddress inAddress=dp.getAddress();
25 String ip = inAddress.getHostAddress();
26 String s = new String(by, 0, length);
27 System.out.println(ip + "---" + s);
28 //释放资源
29 ds.close();
30
31 }
32
33 }
客户端:
1 package cn.socket;
2
3 import java.io.BufferedReader;
4
5 import java.io.InputStreamReader;
6 import java.net.DatagramPacket;
7 import java.net.DatagramSocket;
8 import java.net.InetAddress;
9
10
11 public class ClientSocket {
12 /*
13 * 向服务端发送信息
14 */
15 public static void main(String[] args) throws Exception {
16 //创建socket对象
17 DatagramSocket ds=new DatagramSocket();
18 //创建流
19 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
20 //封装数据
21 String line = br.toString();
22 byte [] by=line.getBytes();
23 int num=by.length;
24 //IP地址
25 InetAddress address=InetAddress.getByName("192.168.60.204");
26 //端口号
27 int port=120;
28 //发送数据
29 DatagramPacket dp=new DatagramPacket(by,num,address, port);
30 ds.send(dp);
31 //关闭资源
32 ds.close();
33 }
34
35 }