对于外部的socket连接,操作系统会提供一个缓冲区存储这些连接,这个连接数是有上限的,当超过这个连接的上限时,新的socket再连接服务器时,就会失败。而对于已经连接到服务器的socket其实也并不是真得连接到了,它们只是被操作系统缓存起来,还需要等待服务器负责对外通讯的进程处理上一个连接之后,才能真得连接到服务器。
但如果服务器采用多线程的方法,即每新到一个socket连接,就生成一个新的子线程去处理它,那么后到的socket就不会被阻塞。
具体操作流程如下:
首先编写Java 客户端和服务端程序(服务端程序有两个,分别是多线程和单线程的)
首先运行服务端程序(单线程),然后再先后运行两个客户端程序,分别标识为first和second,我们先用second 发送消息结果发现并不能发送出去,服务器端一直没有打印出second发送的消息,当我们用fisrt发送消息之后,发现服务器紧随其后就打印出了second发送的消息。这里还发现一个有意思的现象就是,当我们的second客户端在长时间连接未收到响应后,已经自己终止了连接,我们的服务端还是打印出了它之前发送的消息(应该是操作系统的作用)。
上面是单线程的,当我们用多线程时,发现虽然first比second先连接,但它并不会阻塞second向服务端发送消息,second发送的消息可以先一步到达服务端。
客户端连接代码:try{
//ServerSocket serverSocket=null;
Socket socket=null;
Scanner scan=new Scanne