网络编程越来越多人关注,充分利用资源更是无数人的追求,一台服务器同时为多个客户端服务,这是合理的,这也是必须的。我们使用多线程来实现,案例如下:
第一步:创建一个线程类,继承Thread类。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
public class TherapySession extends Thread {
private BufferedReader in;
private String name;
private Writer out;
public TherapySession(InputStream ins, OutputStream outs) {
Reader read = new InputStreamReader(ins);
in = new BufferedReader(read);
out = new OutputStreamWriter(outs);
}
private String response(String text) {
return text; //判断逻辑
}
@Override
public void run() {
try {
out.write("Hello. Welcome to therapy. What is your name? \n");
out.flush();
name = in.readLine();
out.write("Well " + name + " what can we do for you today? \n");
out.flush();
while (true) {
String text = in.readLine();
out.write(response(text) + "\n");
out.flush();
}
} catch (IOException e) {
e.printStackTrace();
super.stop();
}
}
}
第二步:创建服务器类。
import java.net.ServerSocket;
import java.net.Socket;
public class Therapist {
public static final int portNumber = 5321;
public static void main(String[] args) {
try {
Therapist world = new Therapist();
} catch (Exception e) {
e.printStackTrace();
}
}
public Therapist() throws Exception {
//创建绑定到特定端口的服务器套接字
ServerSocket serverSocket = new ServerSocket(portNumber);
while (true) {
//侦听并接受到此套接字的连接
Socket socket = serverSocket.accept();
//创建线程
Thread session = new TherapySession(socket.getInputStream(), socket.getOutputStream());
//启动线程
session.start();
}
}
}
第三步:创建客户端类,与服务器进行会话。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.InetAddress;
import java.net.Socket;
public class TherapyClient {
private static final int portNumber = 5321;
private BufferedReader input, term;
private Writer output;
public static void main(String[] args) {
try {
TherapyClient world = new TherapyClient();
}catch (Exception e) {
e.printStackTrace();
}
}
public TherapyClient() throws Exception {
term = new BufferedReader(new InputStreamReader(System.in));
Socket socket = new Socket(InetAddress.getLocalHost(), portNumber);
Reader reader = new InputStreamReader(socket.getInputStream());
input = new BufferedReader(reader);
output = new OutputStreamWriter(socket.getOutputStream());
while (true) {
String line = input.readLine();
System.out.println(line);
line = term.readLine();
if (line.equals("Quit")) {
break;
}
output.write(line + "\n");
output.flush();
}
}
}
第四步:先运行服务器端程序,然后运行客户端程序,进行会话。