要求:
实现两台电脑之间简单的打字交流
发送方
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Sender {
public static void main(String[] args) throws IOException {
new Receiver().start();
//获取标准输入流,实现在eclipse的控制台里输入信息
Scanner sc=new Scanner(System.in);
//通过死循环实现多条信息的连续传输
while(true){
String msg=sc.nextLine();
//创建一个网络通道
DatagramSocket ds=new DatagramSocket();
//创建数据包
//1.需要发送的字节数组
//2.数组中字节的t偏移量,从头开始设置为0
//3.需要发送的字节长度
//4.接收方的ip
//5.接收方应用程序的端口
DatagramPacket dp=new DatagramPacket(
msg.getBytes(),
0,
msg.getBytes().length,
InetAddress.getByName("192.168.4.xxx"),
6789
);
ds.send(dp);
}
}
}
接受方
借助线程实现在控制台里同时接收和发送发送多个信息
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class Receiver extends Thread{
@Override
public void run() {
DatagramSocket ds=null;
try {
ds = new DatagramSocket(6789);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//声明字节缓冲区,用于存储从通道获取的字节数据
byte [] b=new byte[1024];
//声明一个数据报报(空)接收通道中传的数据
DatagramPacket dp=new DatagramPacket(b, b.length);
while(true){
try {
ds.receive(dp);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//将字节数组中的有效数据解析为字符串
String s=new String(b,0,dp.getLength());
System.out.println("xxx发送的信息为:"+s);
}
}