public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
final ServerSocket server = new ServerSocket(8090);
System.out.println("服务器已经启动" + server);
// 开启一个线程,时刻监听客户端发送过来的连接请求
new Thread() {
public void run() {
super.run();
while (true) {
try {
Socket client = server.accept();// 服务器接收到链接进来的客户端
System.out.println("有客户端链接进来" + client);
// 处理接收到的数据
// 由于服务器不知道客户端什么时候发送数据过来,所以要创建等待线程,时刻等待处理客户端发送过来的额数据
WaitThread waitThread = new WaitThread(client);
waitThread.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
}
// 等待线程
public static class WaitThread extends Thread {
private Socket client;
// 服务端使用输入流读取数据
private DataInputStream reader;
private DataOutputStream writer;
// 在构造等待线程的时候,给客户端赋值
public WaitThread(Socket client) {
super();
this.client = client;
}
public void run() {
super.run();
// 循环等待处理数据
while (true) {
if (reader == null) {
// 根据客户端发来的输入流,创建服务器读取数据的流reader
try {
reader = new DataInputStream(client.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
try {
String msg = reader.readUTF();
//客户端再将消息返回到客户端
System.out.println(msg);
if(writer==null){
try {
writer=new DataOutputStream(client.getOutputStream());
writer.writeUTF(msg+client);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}