TCP服务器如何检测客户端的IP和端口?
你熟悉socket API不?如果不熟悉的话建议先看看socket编程的文档。这是链接地址:http://msdnmicrosoftcom/en-us/library/ms738545(v=VS85)aspx
一般服务端的sokcet API调用顺序为:
bind() // 设置服务端口
listen() // 等待客户端连接
accept() // 与客户端建立连接
请参考:http://msdnmicrosoftcom/en-us/library/ms737526(v=VS85)aspx
这是accept函数的原型:
SOCKET accept(
__in SOCKET s,
__out struct sockaddr addr,
__inout int addrlen
);
第二个参数, addr,包含了客户端的IP地址和端口。你可以认为这就是客户端的IP和端口。但是,要注意的是这个IP不一定就完全等价于客户端本机的端口。比如:客户端在一个局域网里,IP地址是1921681100,然后它通过ADSL路由连接到internet,再通过internet连接到服务端。这个时候,服务端获得的客户端IP地址就可能是那个ADSL路由的IP。
当然是支持多客户了,要不每个网站只能一个用户访问了。目前互联网全是基于TCP/IP协议运行的,而多用户的实现,则是依据每个连接的数据包中的一个16位的数字。详细的,可以研究一下TCP/IP协议,对每一层的数据包的结构定义,这样很多问题都有答案了,这些是学习或了解网络的基本。
有问题欢迎交流,。
仅从抓包信息看是服务器的一个流量控制机制启动了。服务器发回rst位,同时win置为0,是告诉客户端不要发包。按tcp流控机制来说,此时客户端应该停止发包,直至服务器发送信息告诉客户端可以继续发送。
你好;1:与N个客户端相连的话;服务器都有一个对应的socket;也就是N个
2:为什么TCP的C/S应用中,服务器程序要先于客户端程序执行 因为客户端要连接服务器之前先要知道服务器的IP地址和端口号 而且这个端口号是处于监听状态的;如果服务器不先启动 那么也不可能绑定这个端口号 客户端根本连接不上
而UDP的C/S应用中,客户端程序先于服务器程序执行?
如果是通过UDP协议的话;这个没有服务器和客户端之分 是相对独立的个体;如果我是客户端;我只要开启一个端口 绑定这个端口 那么人家知道我的IP地址和这个端口号 可以直接发信息给我 不用连接我;反之对方也一样 希望能帮到你
0条评论