DATE: 2017-09-08 21:43:35
Socket Server端在云端,使用C++ Socket编写的服务端。 这里使用Python 3.6.1版本在Windows平台编写客户端,经测试确实可行。为了安全,我的Server端IP地址这里就不贴出来了。用xxx.xxx.xxx.xxx代替。
第二天测试的时候,发现一个问题: 连续发消息时会报错 socket [WinError 10053] 您的主机中的软件中止了一个已建立的连接 解决方法: 将Socket建立、释放都放在循环内,问题解决。
分析原因,暂且认为是没有指定当前Client进程占用的端口,发送消息后并没有释放端口。当第二次发送消息时进程会占用两个端口,从而会被中止。这一点理论可通过服务端进程的输出信息得到证实。
从图中可以看到,每次发送消息占用的端口都是不同的。
# Python 3.6.1
# 参考来源(Python2):
# http://blog.csdn.net/qianguozheng/article/details/8497052
# http://blog.csdn.net/chuanchuan608/article/details/17915959
# 作者:弈心逐梦 yixzm
# 邮箱:dreamstone_xiaoqw@163.com
from socket import*
HOST = 'xxx.xxx.xxx.xxx' # The remote host
PORT = 8080 # The same port as used by the server
s = None
def startClient():
BUFSIZE = 1024
ADDR = (HOST, PORT)
while True:
data = input('> ')
if not data:
break
tcpCliSock = socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
tcpCliSock.send(data.encode())
data = tcpCliSock.recv(BUFSIZE).decode()
print(data)
tcpCliSock.close()
if __name__ == "__main__":
root = startClient()
root.mainloop()