Socket监听在不同操作系统下的差异

为了确定监听socket和通信socket对端口的占用情况,写了下面的代码进行测试: server.py 功能为启动监听socket,accept连接后,关闭监听socket,用accept接收的端口进行通信. client.py 功能为连接server,发送接收数据,测试连接是否正常. 测试结果发现,在不同的操作系统运行情况不同: 在Windows2003下: 当client连接到server后,server关闭监听端口,此时再次启动一个server进程,可以成功启动. 在RedHat Linux9下: 当client连接到server后,server关闭监听端口,此时再次启动一个server进程,提示失败,端口被占用.用netstat -an 查询,端口实际上并没有处于Listen状态. 测试代码如下,server.py: import socket import time sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.bind(("127.0.0.1",7920)) sock.listen(1) print 'server [%d] listen...'%sock.fileno() conn,rhost=sock.accept() rhost=rhost[0] if rhost: print 'Got connection [%d] from:%s'%(conn.fileno(),rhost) sock.close() #成功接收客户端连接后,关闭侦听socket print "server socket close" for i in range(1000): # Send a request to the host recvdata = conn.recv(100) print recvdata if recvdata == "END!": print "Recv END Command Socket Close!" break; conn.send("%04drecved"%i) time.sleep(2) # Get the host's response, no more than, say, 1,024 bytes conn.close() 客户端代码如下,client.py: import socket import time sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) remote_host = "127.0.0.1" remote_port = 7920 # Connect to the remote host and port sock.connect((remote_host, remote_port)) for i in range(100): # Send a request to the host sock.send("client send:%04d/r/n"%i) # Get the host's response, no more than, say, 1,024 bytes response_data = sock.recv(1024) print response_data time.sleep(2) else: print "End No Error!" sock.send("END!") # Terminate sock.close()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值