- 42
- 0
背景:利用socket完成一个echo服务
逻辑:
- client端发送用户输入data后,调用
shutdown(SHUT_WR)实现半关闭状态 - server端接收用户发送的data,通过
半关闭来判断“消息接收”是否结束 - 等待180s后将data返回给client
我有意将buffer size设置为8,让server端通过判断半关闭状态来完成消息的接收。
问题:client端在调用shutdown(SHUT_WR)后,120s内如果没有收到server端返回的信息,它就会抛出异常[Errno 10060],认为链接中断。
- client端为什么会在
shutdown(SHUT_WR)(关闭读)后等待120s后抛出异常? - 如何控制这个超时时间?
代码:
- Server:
from socket import *
import time
HOST = ''
PORT = 21567
BUFSIZ = 8
ADDR = (HOST, PORT)
tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)
while True:
print 'waiting for connection...'
tcpCliSock, addr = tcpSerSock.accept()
print 'connected from:', addr
data = ""
while True:
recv_data = tcpCliSock.recv(BUFSIZ)
if not recv_data:
break
data += recv_data
time.sleep(60 * 3)
print 'send data:%s' % data
tcpCliSock.send(data)
print 'close connection:', addr
tcpCliSock.close()
- Client:
from socket import *
HOST = 'localhost'
PORT = 21567
BUFSIZ = 8
ADDR = (HOST, PORT)
tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
data = raw_input('>')
tcpCliSock.send(data)
tcpCliSock.shutdown(SHUT_WR)
data = ""
while True:
try:
recv_data = tcpCliSock.recv(BUFSIZ)
if not recv_data:
break
data += recv_data
except Exception as e:
print e
break;
print data
tcpCliSock.close() 0
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

