目录
思路:分别写好客户端与服务器,用DatagramSocket进行数据传输。
客户端
package com.frank.day420; import java.io.IOException; import java.net.*; import java.util.Scanner; public class Client { public static void main(String[] args) throws IOException { System.out.println("---------客户端已启动----------"); DatagramSocket socket=new DatagramSocket(); Scanner sc=new Scanner(System.in); String msg=sc.nextLine(); byte values[]=new byte[1024]; values=msg.getBytes(); InetAddress address=InetAddress.getLocalHost(); DatagramPacket packet=new DatagramPacket(values,values.length,address,8002); socket.send(packet); values=new byte[1024]; DatagramPacket packet1=new DatagramPacket(values,values.length); socket.receive(packet1); System.out.println(new String(values)); socket.close(); } }
服务器端
package com.frank.day420;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.nio.charset.StandardCharsets;
/*
* 服务器
*
* */
public class Server {
/*
* TCP:传输控制协议(打电话)
* 特点:面向连接,安全可靠的,以字节流的方式发送数据
* UDP:用户数据报协议(发快递)
* 特点:无连接,不可靠,以数据报的形式发送数据
*
* DatagramSocket:负责打包后的数据传输
* DatagramPacket:负责对数据进行打包
* void receive(DatagramPacket p) 从此套接字接收数据报包。
* void send(DatagramPacket p) 从此套接字发送数据报包。
* */
public static void main(String[] args) throws IOException {
//1.创建服务器的通信类
System.out.println("------服务器启动中------");
DatagramSocket socket=new DatagramSocket(8002);
//2.接受客户端发送的数据
byte values[]=new byte[1024];
DatagramPacket packet=new DatagramPacket(values,values.length);
socket.receive(packet);
//获取发送方的ip地址
InetAddress address=packet.getAddress();
String ip=packet.getAddress().getHostAddress();
//获取发送方的端口号
int port=packet.getPort();
System.out.println(ip+":"+new String(values));
//3.发送信息给客户端
String msg="Hello,我是服务器";
values=msg.getBytes();
packet=new DatagramPacket(values,values.length,address,port);
socket.send(packet);
//4.释放资源
socket.close();
}
}
总结
简单用UDP通信实现了客户端与服务器之间的单线程通信,之后会对多线程相关内容进行添加。