要求:
编写两个java程序
一个程序为服务端,建立UDP服务端套接字。
另外一个程序为客户端,建立UDP客户端套接字。
这两个新程序可以互联,完成一个基于TCP/IP网络的文本聊天程序。
服务端程序:
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class UDPSend {
void server() throws SocketException{
System.out.println(" 服务端");
while (true) {
try {
DatagramSocket Socket = new DatagramSocket(7777);//创建一个发送消息的套接字
System.out.println("服务端:");
Scanner sc = new Scanner(System.in);
String msg = sc.next();
byte [] bytes = msg.getBytes();//将发送的内容转化为字节数组
InetAddress ip = InetAddress.getByName("10.66.9.132");//接收内容的Ip地址
DatagramPacket Packet = new DatagramPacket(bytes,bytes.length,ip,9001); //创建要发送的数据包,然后用套接字发送
Socket.send(Packet); //用套接字发送数据包
receiver(Socket);//调用receiver方法,接收客户端回馈的信息
Socket.close(); //关闭套接字
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
void receiver(DatagramSocket Socket) throws IOException{ //构建接收客户端信息的方法
byte[] byte01=new byte[2048];
DatagramPacket data=new DatagramPacket(byte01,byte01.length);//创建包接收信息
Socket.receive(data);//接收信息
String re=new String(data.getData());//将接收的信息转换为String型
System.out.println("客户端发的消息为:"+re);
}
public static void main(String[] args) throws SocketException{
UDPSend s = new UDPSend();
s.server();
}
}
客户端程序:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;
public class UDPReceive {
void client() throws SocketException{
System.out.println(" 客户端");
while (true) {
try {
DatagramSocket Socket= new DatagramSocket(9001,InetAddress.getByName("10.66.9.132")); //创建接收消息的套接字,端口和ip要与服务端指定的一致
byte [] bytes = new byte[2048];
DatagramPacket Packet = new DatagramPacket(bytes,bytes.length); //创建一个数据包来接收消息
Socket.receive(Packet);//接收数据包
String rec = new String(Packet.getData()) ;//将接收的信息转换为String
System.out.println("服务端发送的消息为:"+rec);
System.out.println("客户端发送消息:");
Scanner sc=new Scanner(System.in);
String sr=sc.next();
byte[] byte01=sr.getBytes();
DatagramPacket data =new DatagramPacket(byte01,byte01.length,Packet.getSocketAddress());//创建发送信息的包,指定给发送者socketAddress(ip和指定端口 )
Socket.send(data);//发送数据包
Socket.close();//关闭套接字
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws SocketException {
UDPReceive r = new UDPReceive();
r.client();
}
}
运行结果: