import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MultipartCommunicationTcpTest implements Runnable{
private Socket socket = null;
private ServerSocket serverSocket = null;
public static void main(String[] args) {
MultipartCommunicationTcpTest communicationTcpTest = new MultipartCommunicationTcpTest();
communicationTcpTest.communicate();
}
public void communicate()
{
try {
serverSocket = new ServerSocket(8001);
while(true)
{
//这是与一个客户端开启连接,这里不断的循环,表示可以与很多个客户端连接
socket = serverSocket.accept();
//与每个客户端连接的回话都是在一个单独的线程中进行,如果不是在一个单独的线程进行,如果有一个与客户端的回话中断,
//那么其他人就不能进行回话了,因为只有一个线程
new Thread(this).start();
}
} catch (Exception e) {
if(socket.isClosed())
{
}else
{
e.printStackTrace();
}
}
}
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//第二个参数表示当我们用println打印数据的时候,就会自动调用flush这个方法,如果设置为false,就算是用println也不会自动刷新,默认是false
PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
//这里的循环表示与一个客户端进行不断的来回通信
while(true)
{
String receiveStr = br.readLine();
//当输入的是quit的时候,就结束这个回话
if(receiveStr.equals("quit"))
{
br.close();
printWriter.close();
socket.close();
break;
}
System.out.println(receiveStr);
printWriter.println(receiveStr + "------>" + new StringBuffer(receiveStr).reverse());
}
} catch (Exception e) {
if(socket.isClosed())
{
}else
{
e.printStackTrace();
}
}
}
}