题目:
仿照例15.5,编写完整的基于数据报的多客户/服务器通信程序。
代码:
一、服务器端
public class QServer {
public static void main(String args[]) throws IOException{
System.out.println("********************服务器********************");
System.out.println("**************端口4700等待被连接**************");
new QuoteServerThread("QuoteServerThread").start();
}
}
二、服务器线程
public class QuoteServerThread extends Thread {
protected DatagramSocket socket = null;
protected BufferedReader in = null;
protected boolean moreQuotes = true;
public QuoteServerThread() throws IOException{
this("QuoteServerThread");
}
public QuoteServerThread(String name) throws IOException{
super(name);
socket = new DatagramSocket(4700);
in = new BufferedReader(new InputStreamReader(System.in));
}
public void run() {
while(moreQuotes) {
try {
// 接收客户端消息
byte[] buf = new byte[256];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
System.out.println("Client:" + new String(packet.getData()));
// 给客户端发送消息
String dString = in.readLine();
if(dString.equals("bye"))
moreQuotes = false;
buf = dString.getBytes();
InetAddress address = packet.getAddress();
int port = packet.getPort();
packet = new DatagramPacket(buf, buf.length, address, port);
socket.send(packet);
}catch(IOException e) {
e.printStackTrace();
moreQuotes = false;
}
}
socket.close();
}
}
三、客户端
public class QClient {
public static void main(String[] args) {
try {
DatagramSocket socket = new DatagramSocket();
InetAddress address = InetAddress.getByName("127.0.0.1"); //服务器地址
int port = 4700; // 服务器的端口号
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
DatagramPacket packet;
String readline;
readline = sin.readLine();
byte[] buf = new byte[256];
buf = readline.getBytes();
while(!readline.contentEquals("bye")) {
packet = new DatagramPacket(buf, buf.length, address, port);
socket.send(packet);
buf = new byte[256];
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
String received = new String(packet.getData());
System.out.println("Server:" + received);
buf = new byte[256];
readline = sin.readLine();
buf = readline.getBytes();
}
socket.close();
}catch(Exception e) {
System.out.println("Error: "+e);
}
}
}