在这里记点常用的写法,方便日后查阅,也希望能帮助到大家:
服务器端,首先要有一个线程,不停的循环,监听是否有客户端请求:
/**
* 定义Request监听线程
* @author zengfudan
*
*/
public class RequestListenerThread extends Thread implements Runnable {
// private Socket socket = null;
public RequestListenerThread(final int port) throws IOException {
}
public void run() {
System.out.println("Listening on port " + server.getLocalPort());
while (!Thread.interrupted()) {
try {
// 接收到客户端的请求后,开启一个新的线程进行处理
new Thread(new WorkerThread(server.accept())).start();
} catch (SocketException e) {
break;
} catch (IOException e) {
continue;
}
}
System.out.println("RequestListener stopped !");
}
}
----------------------------------------------------------------------
每收到一个新的客户端请求,就将server.accept()产生的socket对象,交给一个新开启的线程,用于和该客户端进行后续的数据交换。
/**
* 每个客户端对应一个单独的线程
* @author zengfudan
*
*/
class WorkerThread extends Thread implements Runnable {
private final Socket client;
private final OutputStream output;
private final BufferedReader input;
public WorkerThread(final Socket client) throws IOException {
super();
this.client = client;
this.output = client.getOutputStream();
this.input = new BufferedReader(new InputStreamReader(client.getInputStream()));
}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
Request request;
Response response;
System.out.println("Connection from " + client.getInetAddress().getHostAddress());
while (!Thread.interrupted()) {
try {
// 用于接收客户端发送来的数据
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String content = in.readLine();
if (null != content)
System.out.println("received from client: " + content);
// 用于向客户端发送数据
PrintWriter out = new PrintWriter(client.getOutputStream(),true);
out.println("your input is: " + content);
} catch (SocketException e) {
break;
} catch (Exception e) {
}
}
在这个线程中,使用 BufferedReader来读取客户端的数据使用PrintWriter向客户端回写数据