简单的UDP代码 客户端+服务器 (网络真好玩,发什么自动回复什么,还能查字典呢,一起来玩呀)

1.简单的UDP echo 服务器+客户端
发什么,回什么

服务器端的代码如下

package udp.echo;

import java.net.*;

public class Server{
public static void main(String[] args) throws IOException{
//新建一个DatagramSocket
DatagramSocket udpServerSocket=new DatagramSocket(9898);  //连接的同时直接绑定9898端口,如果一台主机有多个网卡,就需要绑定IP+端口
//接下来等着收消息
byte[] receiveBuffer=new byte[1024];//传过来的是二进制数据流,需要一个字节数组来接收
DatagramPacket receivePacket=new DatagramPacket(receiveBuffer,receiveBuffer.length);
udpServerSocket.receive(receivePacket);
InetAddress clientAddress=recievePacket.getAddress();
System.out.printf("我从 %s:%d 收到了消息%n",clientAddress.getHostAddress(),receivePacket.getport());
System.out.printf("我一共收到了%d字节的数据%n",receivePacket,getLength())
//需要将发过来的二进制数据流进行解码
String message=new String(receivePacket.getData(),0,receivePacket.getLength(),"UTF-8");
System.out.println(message);//收到消息了

byte[] sendBuffer=message.getButes("UTF-8");
DatagramPacket sendPacket=new DatagramPact(sendBuffer,sendBuffer.length,clientAddress,receivePacket.getPort());
udpServerSocket.send(sendPacket);

udpServerSocket.close();  //最后要关闭连接
}

客户端的代码如下:

package udp.echo;

import java.net.*;

public class Client{
   public static void main(String[] args) throws IOException{
   //建立连接
   DatagramSocket clientSocket=new DatagramSocket(); //客户端不需要绑定端口啥的,直接发送数据
   String message="收到我的消息没?";//需要将这个文本转成字节型的
   byte[] sendBuffer=message.getBytes("UTF-8");//默认使用UTF-8编解码,但是推荐写上
   //构建DatagramPacket
   byte[] serverIP=new byte[4];//地址是IPv4类型的,所以是4位
   //我要发送给本机,本机默认IP地址是127.0.0.1  改成别的主机的IP不同设备互动会更有意思哦(*^^*)
   serverIP[0]=127;
   serverIP[1]=0;
   serverIP[2]=0;
   serverIP[3]=1;
   InetAddress serverAddress=InetAddress.getByAddress(serverIP);
   DatagramPacket sendPacket=new DatagramPacket(sendBuffer,sendBuffer.length,serverAddress,9898);//客户端要带着IP和端口,知道自己往哪儿发,端口号要和服务器那边一致
   udpClientSocket.send(sendPacket);//发送数据

byte[] receiveBuffer=new byte[1024];
DatagramPacket receivePacket=new DatagramPacket(receiveBuffer,receiveBuffer.length);
udpClientSocket.receive(receivePacket);
String responseMessage=new String(receivePacket.getData(),0,receivePacket.getLenth(),"UTF-8");
System.out.println("responseMessage");
   
udpClientSocket.close(); //关闭连接

注意:1.无论是发送数据,还是接收数据都需要一个byte类型的数据,需要进行字节类型和字符类型的转换;
2.需要指定相同的编码方式;
3.服务器是先收后发,客户端是先发后收,其他都是类似的;
4.通过DatagramPacket 更加深入的理解UDP是面向报文的

2.把上面的代码稍加改动,就是一个查字典小工具啦

服务器的代码如下:

public class Server{
private static final Map<String,String> dict=new HashMap<>();
static{
dict.put("苹果","apple");
dict.put("梨","pear");
dict.put("桃子","peach");
dict.put("葡萄","grape");
dict.put("香蕉","banana");   //手动输进去有点low啊
}
public static void main(String[] args) throws IOException{
//新建一个DatagramSocket
DatagramSocket udpServerSocket=new DatagramSocket(9898);  //连接的同时直接绑定9898端口,如果一台主机有多个网卡,就需要绑定IP+端口
//接下来等着收消息
byte[] receiveBuffer=new byte[1024];//传过来的是二进制数据流,需要一个字节数组来接收
DatagramPacket receivePacket=new DatagramPacket(receiveBuffer,receiveBuffer,receiveBuffer.length);
udpServerSocket.receive(receivePacket);
InetAddress clientAddress=recievePacket.getAddress();
System.out.printf("我从 %s:%d 收到了消息%n",clientAddress.getHostAddress(),receivePacket.getport());
System.out.printf("我一共收到了%d字节的数据%n",receivePacket,getLength())
//需要将发过来的二进制数据流进行解码
String message=new String(receivePacket.getData(),0,receivePacket.getLength(),"UTF-8");
System.out.println(message);//收到消息了

String responseMessage=dict.getOrDefault(message,"我也不知道呀");

byte[] sendBuffer=responseMessage.getButes("UTF-8");
DatagramPacket sendPacket=new DatagramPact(sendBuffer,sendBuffer.length,clientAddress,receivePacket.getPort());
udpServerSocket.send(sendPacket);

udpServerSocket.close();  //最后要关闭连接
}

客户端的代码如下:

package udp.echo;

import java.net.*;

public class Client{
   public static void main(String[] args) throws IOException{
   //建立连接
   DatagramSocket clientSocket=new DatagramSocket(); //客户端不需要绑定端口啥的,直接发送数据
   while(true){
   Scanner scanner=new Scanner(System.in); 
   String message=scanner.nextline();
   
   byte[] sendBuffer=message.getBytes("UTF-8");//默认使用UTF-8编解码,但是推荐写上
   //构建DatagramPacket
   byte[] serverIP=new byte[4];//地址是IPv4类型的,所以是4位
   //我要发送给本机,本机默认IP地址是127.0.0.1  改成别的主机的IP不同设备互动会更有意思哦(*^^*)
   serverIP[0]=127;
   serverIP[1]=0;
   serverIP[2]=0;
   serverIP[3]=1;
   InetAddress serverAddress=InetAddress.getByAddress(serverIP);
   DatagramPacket sendPacket=new DatagramPacket(sendBuffer,sendBuffer.length,serverAddress,9898);//客户端要带着IP和端口,知道自己往哪儿发,端口号要和服务器那边一致
   udpClientSocket.send(sendPacket);//发送数据

byte[] receiveBuffer=new byte[1024];
DatagramPacket receivePacket=new DatagramPacket(receiveBuffer,receiveBuffer.length);
udpClientSocket.receive(receivePacket);
String responseMessage=new String(receivePacket.getData(),0,receivePacket.getLenth(),"UTF-8");
System.out.println("responseMessage");
}
   
udpClientSocket.close(); //关闭连接

3.稍加改动就是一个聊天软件

聊天宝欢迎您嘞!

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值