tianshi0253 发表于 2013-2-4 19:13:39

一个C/S结构的输入字符并且显示的源码(可以自行填写服务器地址)

一个C/S结构的输入字符并且显示的源码。在客户端输入任意字符,通过服务器可能回显到客户端上。在客户端上输入"exit",退出程序。 用户可以自行填写服务器地址
包括EchoServer和EchoClient两个class文件,分别为服务器和客户端文件。
 
EchoServer.class的源码如下:
 
<div class="quote_div">import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class EchoServer {
private int port = 8000;
private ServerSocket serverSocket;

public EchoServer() throws IOException {
serverSocket = new ServerSocket(port); // 监听8000端口
System.out.println("服务器启动");
}

public String echo(String msg) {
return "echo : " + msg;
}

// 向客户端发送处理后的消息
private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut, true);
}

// 接收客户端发送过来的消息
private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}

public void service() {
while (true) {
Socket socket = null;
try {
socket = serverSocket.accept(); // 等待客户连接
System.out.println("New connection accepted"
+ socket.getInetAddress() + " : " + socket.getPort());
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);

String msg = null;
while ((msg = br.readLine()) != null) {
System.out.println(msg); // 打印出接收到的消息
pw.println(echo(msg)); // 把处理后的消息返回给客户端
if (msg.equals("exit"))
break;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socket != null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

public static void main(String[] args) throws IOException {
new EchoServer().service();
}

}
页: [1]
查看完整版本: 一个C/S结构的输入字符并且显示的源码(可以自行填写服务器地址)