Python实现套接字(Socket)的客户端(Client)

Python实现套接字(Socket)的客户端(Client)


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()
版权声明

弈心博客


本文首发site_name,转载请附上博文链接!