socket编程
socket编码过程中,通过 netstat -ao(可以查看本服务器的活动连接数) 命令 分别在服务器和客户端上可以查看 连接 的情况
查看服务器端用 Socket监听8000端口, 可以看到 有来自于外部客户端的4个连接, Socket监听进程ID 1212 ,本地监听端口 8000, 外部地址的端口有4个
在其中一个客户端Socket所在机器 运行 netstat -ao
可以看到 本机地址端口是2400, 外部访问端口是8000 ,本机的socket客户端进程是2068
以上SOCKET的服务端和客户端程序通信协议是基于 TCP
State显示 established 表示 外部端口和内部端口“建立”了连接,当服务端SOCKET进程开始监听,但没有客户端连接它的时候,它的State状态是 listening
基于这个命令还可以查看 本机 某个通讯程序 需要对外开放的端口(本地监听端口)在服务器端 和 客户端 是否被防火墙挡住,而不能进行通讯。
其实IIS也是一个Socket服务端程序,它在默认80端口 监听所有外部客户端的请求,只不过它是基于http协议的,应为http协议是无状态的,保持的是短连接一个来回响应以后,在服务端就中断了连接 keepalive = false,这样就可以保证高并发, 服务器的很多端口不会因为客户端的长时间连接不释放而造成不够用的情况,导致后来的客户端程序因为无法获取端口而无法跟服务器进行通信, 而与此相反,如果一个基于TCP 协议的 Socket 的通讯协议 (比如IM ,分服务端和客户端程序) 当服务端监听足够多的客户端连接,而没有释放,容易导致接下来的客户端程序无法与服务端进行通讯(无法在服务端获取可用端口),这一切都是因为TCP是长连接 ,与HTTP不同,所以需要在服务端控制当客户端程序关闭socket_client,服务端也要马上关闭与其对应的socket_server(这个是有监听Socket的返回给服务器的)
还可以用工具TcpTrace 来监控基于TCP协议的 Socket程序
socket 服务端程序 监控的是8000端口, IP是 10.60.44.127
运行TcpTrace工具
代理监听端口设置为8080,目标服务器为Socket服务端 IP 10.60.44.127 端口是 服务端的真实监听端口 8000, 注意这个监控工具运行在 服务器机器上 而非客户端机器上
socket客户端程序 连接到 服务端 需要 输入 10.60.44.127 : 8000, 现在由于要用工具截获 服务端和客户端的 数据包 接受和发送
需要指定一个代理监听端口, 所以 这里输入 10.60.44.127:8080
如有其它问题,则请通过【telnet ip 端口号】看服务端是否开启此端口。
作者:ChenLuLouis
出处:http://www.cnblogs.com/chenlulouis/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-chenlulouisBlog。
posted on 2011-01-27 21:39 chenlulouis 阅读(5081) 评论(1) 编辑 收藏 举报