论坛首页 入门讨论版 Java

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

浏览 273 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-02-20

一个C/S结构的输入字符并且显示的源码。在客户端输入任意字符,通过服务器可能回显到客户端上。在客户端上输入"exit",退出程序。 用户可以自行填写服务器地址

包括EchoServer和EchoClient两个class文件,分别为服务器和客户端文件。

 

EchoServer.class的源码如下:

 

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();
}

}

 

EchoClient.class文件的源码如下:

写道
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.Socket;

public class EchoClient {
private int port = 8000;
private Socket socket;

public EchoClient(String host) throws IOException {
socket = new Socket(host, port);
System.out.println("Find an Server.Create socket conn success!");
}

public static void main(String[] args) throws IOException {
System.out.println("Please enter the IP Address of the Server:");
BufferedReader serAdd = new BufferedReader(new InputStreamReader(System.in));

new EchoClient(serAdd.readLine().toString()).talk();
}

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 talk() throws IOException {
try {
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);
BufferedReader localReader = new BufferedReader(
new InputStreamReader(System.in));
String msg = null;
while ((msg = localReader.readLine()) != null) {
pw.println(msg);
System.out.println(br.readLine());
if (msg.equals("exit"))
break;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

}

 

   
时间:2008-02-22
老实说,看不到B/S的B在哪里,还有,这只是最基本的Socket编程,贴上来干什么?最好在标题上说明.
   
0 请登录后投票
时间:2008-02-22

不好意思,菜菜鸟我是。
为了学习贴上去的。
不好意思~
   
0 请登录后投票
论坛首页 入门讨论版 Java

跳转论坛: