服务端:
package ServerMultithreadedProgram;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
private static ServerSocket ServerSocket = null;
static {
try {
ServerSocket = new ServerSocket(9090);
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
System.out.println("服务器已启动,等待客户端连接");
Socket socket = null;
while (true) {
socket = ServerSocket.accept();
new ServerThread(socket).start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
服务线程类:
package ServerMultithreadedProgram;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class ServerThread extends Thread{
private Socket client;
public ServerThread(Socket socket) {
this.client = socket;
}
public void run() {
BufferedReader br = null;
PrintWriter pw = null;
String str;
try {
br = new BufferedReader(new InputStreamReader(client.getInputStream()));
pw = new PrintWriter(client.getOutputStream());
while ((str = br.readLine()) != null) {
System.out.println("收到请求" + str);
pw.println("服务端收到请求:" + str);
pw.flush();
if (str.equals("end")) {
System.out.println("end");
break;
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pw.close();
try {
client.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
用户类:
package ServerMultithreadedProgram;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client2 {
public static void main(String[] args) {
Socket server = null;
BufferedReader br = null;
BufferedReader wt = null;
PrintWriter pw = null;
try {
server = new Socket("127.0.0.1", 9090);
br = new BufferedReader(new InputStreamReader(server.getInputStream()));
wt = new BufferedReader(new InputStreamReader(System.in));
pw = new PrintWriter(server.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
String str = "";
while (true) {
try {
str = wt.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pw.println(str);
pw.flush();
if (str.equals("end")) {
System.out.println("通讯结束end");
break;
}
try {
System.out.println(br.readLine());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
br.close();
pw.close();
wt.close();
server.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
说明,只是将Server/Client改成服务端多线程版本。
本文介绍了一个简单的服务端多线程程序实现,通过监听端口接收客户端连接,并为每个客户端创建新的线程来处理请求。客户端和服务端之间的通信采用标准输入输出流。
1万+

被折叠的 条评论
为什么被折叠?



