一个经典的JAVA多线程TCP服务器,可用于多种网络测试
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.lang.management.ThreadInfo;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("开始监控端口10000");
Server server = new Server();
}
public Server() {
Listen();
}
public void Listen() {
// 保存读入的字符串
String str;
try {
//建立服务端套接字
ServerSocket s = new ServerSocket(10000);
System.out.println("监听成功" + s);
while (true) {
// 监听,接受客户端的连接请求
Socket socket = s.accept();
System.out.println("接受连接: " + socket);
System.out.println("开始一个新线程");
Handler handler=new Handler(socket);
handler.run();
}
} catch (Exception ex) {
System.out.println("服务器监听端口失败!");
System.exit(0);
}
}
}
class Handler implements Runnable{
Socket socket;
//DataInputStream in;
//DataOutputStream out;
BufferedReader in;
BufferedWriter out;
public String hello = "Hello! I am server";
public Handler(Socket socket)throws IOException
{
this.socket=socket;
//in=new DataInputStream(new BufferedInputStream(socket.getInputStream()));
//out=new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
out=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
}
@Override
public void run() {
// TODO Auto-generated method stub
try{
//out.writeUTF(hello);
out.write(hello);
out.flush();
while(true)
{
//String msg=in.readUTF();
String msg=in.readLine();
if(msg==null) {
System.out.println("客户端离开");
//socket.close();
return;
}
System.out.println(socket.toString()+" said:" + msg);
out.write(hello);
out.flush();
}
}catch (Exception e) {
// TODO: handle exception
System.out.println("连接错误,可能客户端已关闭!");
}finally {
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
}
}
}
}