Java使用Socket进行通信

什么是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 }
原文地址:https://www.cnblogs.com/luoxionghenku/p/8686685.html