C#TCP异步服务器和客户端咋连接?
TCP服务器端的客户端使用的方法不一样,服务器被叫,客户端主叫。服务器程序,设定一个端口用于客户端呼叫连接,声明一个socket绑定到这个端口,侦听客户端呼叫即可。客户端声明一个socket,通过客户端socket对服务器指定端口发出连接请求(主叫),服务器相应此连接请求,建立连接,然后就可以互相通讯了。
服务器和客户端,就是在主叫与被叫上有区别,建立连接后,数据的收发都是一样的。
#三次握手
客户端向服务器端发送SYN包,客户端进入SYN_SEND状态
服务器端收到客户端发送的包返回ACK+SYN包,服务器端进入SYN_RECV状态
客户端收到服务器端返回的包再发回ACK包,客户端进入ESTABLISHED状态,服务器端收到包也进入ESTABLISHED状态
客户端状态:SYN_SENDE STABLISHED
服务器端状态:SYN_RCVE ESTABLISHED
#四次挥手
客户端发送FIN包询问服务器端是否能断开,客户端进入FIN_WAIT_1状态
服务器端收到客户端发送的包并返回ACK包,服务器端进入CLOSE_WAIT状态
服务器端准备好断开后,发送FIN包给客户端,服务器端进入LAST_ACK状态
客户端收到服务器端发送的包后返回ACK包,客户端进入TIME_WAIT状态,服务器端收到包后进入CLOSED状态
客户端状态:FIN_WAIT_1 FIN_WAIT_2 TIME_WAIT
服务器端状态:CLOSE_WAIT LAST_ACKC LOSED
如果有什么不懂的话可以去看看《Linux就该这么学》这本书,非常适合新手学习Linux。
只要资源
(内存硬盘cpu)足够,理论上可以接收无限个链接。所谓65535的限制,是针对客户端的,客户机每链接一个服务,就必须开一个tcp端口与之对应。这样,链接到65535个服务后,本地端口就被占满。服务端口仅仅使用一个。一个tcp链接,是四个元素决定的,server
IP:port+client IP:port。
0条评论