程序说明:
发送端(player1)、接收端(player2)
发送端先发送任意内容至接收端,接收端接收内容并发送回复内容至发送端 形成简易聊天模式
最后发送端发送886 接收端回复任意内容 聊天断开(线程结束)
发送端:
package com.homework.homework0805.editio1;
import java.io.*;
import java.net.*;
/**
* @Author jinman1012@qq.com 2020/8/5 15:45
* @Version 1.0
*/
public class DataSender {
public static void main(String[] args) throws IOException {
//建立udp的socket对象 DatagramSocket
DatagramSocket socket = new DatagramSocket(10857);
//将要发送的数据封装成数据包
String dataSend;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//创建接收数据的数据报包
byte[] buf = new byte[1024];
DatagramPacket recPackage = new DatagramPacket(buf, 0, buf.length);
while ((dataSend = br.readLine()) != null) {
//send
sendInfo(socket, dataSend);
//receiver
socket.receive(recPackage);
String str = parseInfo(recPackage);
//循环终止判断
if (dataSend.equals("886")) break;
}
//对资源进行释放
socket.close();
}
private static void sendInfo(DatagramSocket socket, String dataSend) throws IOException {
byte[] dataBytes = dataSend.getBytes();
InetAddress targetIp = InetAddress.getByName("127.0.0.1");
DatagramPacket sendpacket = new DatagramPacket(dataBytes, 0, dataBytes.length, targetIp, 51857);
//通过udp的socket对象,将数据包发送出
socket.send(sendpacket);
}
private static String parseInfo(DatagramPacket packet) {
//对收到的数据进行解析
byte[] dataByte = packet.getData();
int offset = packet.getOffset();
int length = packet.getLength();
String str = new String(dataByte, offset, length);
System.out.println("收到来自主机" + packet.getAddress()
+ ":" + packet.getPort() + "的消息:" + str);
return str;
}
}
接收端:
package com.homework.homework0805.editio1;
import java.io.*;
import java.net.*;
/**
* @Author jinman1012@qq.com 2020/8/5 15:45
* @Version 1.0
*/
public class DataReceiver {
public static void main(String[] args) throws IOException {
boolean flag = true;
//建立udp的socket对象.
DatagramSocket socket = new DatagramSocket(51857);
//创建用于接收数据的数据报包,通过socket对象的receive方法接收数据
byte[] buf = new byte[1024];
DatagramPacket recpacket = new DatagramPacket(buf, 0, buf.length);
//send DatagramPacket
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String data;
//通过数据包对象的功能来完成对接收到数据进行解析.
while (flag) {
//receiver
socket.receive(recpacket);
String str = parseInfo(recpacket);
//send
data = br.readLine();
sendInfo(socket, data);
//循环终止判断
if (str.equals("886")) flag = false;
}
//可以对资源进行释放
socket.close();
}
private static String parseInfo(DatagramPacket packet) {
//对收到的数据进行解析
byte[] dataByte = packet.getData();
int offset = packet.getOffset();
int length = packet.getLength();
String str = new String(dataByte, offset, length);
System.out.println("收到来自主机" + packet.getAddress()
+ ":" + packet.getPort() + "的消息:" + str);
return str;
}
private static void sendInfo(DatagramSocket socket, String dataSend) throws IOException {
byte[] dataBytes = dataSend.getBytes();
InetAddress targetIp = InetAddress.getByName("127.0.0.1");
DatagramPacket sendpacket = new DatagramPacket(dataBytes, 0, dataBytes.length, targetIp, 10857);
//通过udp的socket对象,将数据包发送出
socket.send(sendpacket);
}
}