一段使用UDP进行服务器/客户端通信的程序
|
zhaoxq
老紫竹 ![]()
管理员
|
1 # 大 中 小 发表于 2008-03-22 05:44:17
From:http://topic.csdn.net/u/20080321/21/661567cf-81d4-420f-a61c-8e7c60cebb05.html?seed=1474100492
CharServer.java import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
/**
* 服务器端程序,用于接收连接。
* 注意,此程序并没有启用多线程,所以顶多算一个原型。
*
* @author 赵学庆 www.java2000.net
*/
public class ChatServer {
static final int PORT = 8000;
private byte[] buf = new byte[1000];
private DatagramPacket dgp = new DatagramPacket(buf, buf.length);
private DatagramSocket sk;
public ChatServer() {
try {
sk = new DatagramSocket(PORT);
System.out.println("Server started");
while (true) {
sk.receive(dgp);
String rcvd = new String(dgp.getData(), 0, dgp.getLength()) + ", from address :" + dgp.getAddress() + ",port:"
+ dgp.getPort();
System.out.println(rcvd);
String outMessage = "";
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
try {
outMessage = stdin.readLine();
} catch (IOException ie) {
System.out.println("IO error");
}
String outString = "Server say:" + outMessage;
byte[] buf = outString.getBytes();
DatagramPacket out = new DatagramPacket(buf, buf.length, dgp.getAddress(), dgp.getPort());
sk.send(out);
}
} catch (SocketException e) {
System.out.println("cannot open socket");
e.printStackTrace();
System.exit(1);
} catch (IOException e) {
System.out.println("Communication error");
e.printStackTrace();
System.exit(1);
}
}
public static void main(String[] args) {
new ChatServer();
}
}CharClient.javaimport java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
/**
* 客户端程序,用于请求连接。
*
* @author 赵学庆 www.java2000.net
*/
public class ChatClient {
private DatagramSocket s;
private InetAddress hostAddress;
private byte[] buf = new byte[1000];
private DatagramPacket dp = new DatagramPacket(buf, buf.length);
public ChatClient() {
try {
s = new DatagramSocket();
hostAddress = InetAddress.getByName("localhost");
while (true) {
String outMessage = "";
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
try {
outMessage = stdin.readLine();
} catch (IOException ie) {
System.err.println("IO error!");
}
if (outMessage.equals("bye"))
break;
String outString = "Client say: " + outMessage;
byte[] buf = outString.getBytes();
DatagramPacket out = new DatagramPacket(buf, buf.length, hostAddress, 8000);
s.send(out);
s.receive(dp);
String rcvd = "rcvd from " + dp.getAddress() + ", " + dp.getPort() + ": " + new String(dp.getData(), 0, dp.getLength());
System.out.println(rcvd);
}
} catch (UnknownHostException e) {
System.out.println("Can;t open socket");
System.exit(1);
} catch (SocketException e) {
System.out.println("Can;t open socket");
e.printStackTrace();
System.exit(1);
} catch (IOException e) {
System.err.println("Communication error");
e.printStackTrace();
System.exit(1);
} catch (Exception e) {
System.err.println("Communication error");
e.printStackTrace();
System.exit(1);
}
System.out.println("ChatClient over");
}
public static void main(String[] args) {
new ChatClient();
}
}
快乐渡过每一天,减肥坚持每一天
|
|||||
|




