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