摘要:
状态迁移1. SO_LINGER/ SO_REUSEADDR TCP正常的关闭过程如下(四次握手过程):(FIN_WAIT_1) A ---FIN---> B(CLOSE_WAIT)(FIN_WAIT_2) A B(CLOSED) Ø A端首先发送一个FIN请求给B端,要求关闭,发送后A段的TCP状态变更为FIN_WAIT_1,接收到FIN请求后B端的TCP状态变更为CLOSE_WAIT Ø B接收到ACK请求后,B回一个ACK给A端,确认接收到的FIN请求,接收到ACK请求后,A端的TCP状态变更为为FIN_WAIT_2。 Ø B端再发... 阅读全文
摘要:
Java提供了一个很好地类来实现1中的线程池功能就是Executors类。将服务端代码改变一下就OK了。当然了,ReceiveFile类还需要改变一下(实现一个Runnable接口,并将receiveFile方法的内容写到run方法中,删除receiveFile方法即可)。package com.wjy.threadpool;import java.io.BufferedInputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import java.util.con.. 阅读全文
摘要:
服务端处理客户端的请求,对于Socket采用TCP连接的手段来说,由于一个SocketServer只对应和一个Socket通信。所以,为了有效的控制服务端的服务质量,采取线程池的策略。集体说来就是开启若干个SocketServer来对预想连接到服务器的客户端们进行处理,若是同一时间有很多客户端涌入,线程池中的ServerSocket都不够用了都被占用了,则多余的那些客户端就先等待,等有的ServerSocket执行完之后再来和他们通信处理。具体的最简单的线程池实现如下代码所示(每个ServerSocket实现了接受文件的任务,而假想很多客户端涌入要求向服务端传输文件):package co.. 阅读全文