服务器如果需要同时跟多个客户端会话,服务器端就需要循环调用ServerSocket.accept()方法进行不断的监听处理;另外如果服务器端程序与每个客户端的会话过程不能互相影响的话,就需要启动多个线程分别处理每个请求
下面给个例子(发送一行文本字符,服务器端返回倒序的文本):
1.ReverseServer.java文件
2.Servicer.java文件
当服务端运行起来后,我们就可以模拟客户端来测试:
下面给个例子(发送一行文本字符,服务器端返回倒序的文本):
1.ReverseServer.java文件
- package cn.com;
- import java.io.IOException;
- import java.net.ServerSocket;
- import java.net.Socket;
- public class ReverseServer {
- public static void main(String[] args) {
- try {
- ServerSocket ss = new ServerSocket(8001);
- boolean bRunning = true;
- while (bRunning) {
- Socket s = ss.accept();
- new Thread(new Servicer(s)).start();
- }
- ss.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
2.Servicer.java文件
- package cn.com;
- 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 Servicer implements Runnable {
- Socket s;
- public Servicer(Socket s) {
- this.s = s;
- }
- @Override
- public void run() {
- // TODO Auto-generated method stub
- try {
- InputStream ips = s.getInputStream();
- OutputStream ops = s.getOutputStream();
- BufferedReader br = new BufferedReader(new InputStreamReader(ips));
- //需要启动自动flush功能
- PrintWriter pw = new PrintWriter(ops,true);
- while (true) {
- String strLine = br.readLine();
- if (strLine.equalsIgnoreCase("quit")) {
- break;
- }
- System.out.println("strLine =="+strLine);
- String strEcho = (new StringBuffer(strLine).reverse())
- .toString();
- pw.println(strLine + "---->>>" + strEcho);
- }
- br.close();
- pw.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
当服务端运行起来后,我们就可以模拟客户端来测试:
- cmd---->telnet 127.0.0.1 8001---->输入一行字符,回车就会看到效果
浙公网安备 33010602011771号