将python socket服务端包成exe文件后客户端收不到信息也不结束
## 问题描述
自己用socket模块搭建了一个简单的服务器,直接运行服务端和客户端代码的时候能够实现通信,但是使用pycharm和pyinstaller模块将服务端打包成exe文件后,执行服务端exe文件,客户端一直收不到服务端发送的消息,也不结束
## 服务端代码
```python
import socket
from multiprocessing import Process
# 多进程模式
def handle_client(client_socket: socket.socket):
"""
处理客户端请求
:param args:客户端socket
:return:
"""
# 获取客户端请求数据
request_data = client_socket.recv(1024)
request_data.splitlines()
print("request_data:", request_data)
# 构造响应数据
response_start_line = "HTTP/1.1 200 0K\r\n"
response_header = "Server: My Server\r\n"
response_body = "hello wangdaye"
response = response_start_line + response_header + "\r\n" + response_body + "\n"
print("response_data:", response)
# 向客户端返回相应数据
client_socket.send(bytes(response, "utf8"))
# 关闭客户端连接
client_socket.close()
if __name__ == '__main__':
HTML_ROOT_DIR = ''
IP = "127.0.0.1"
PORT = 8111
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 使用IPv4,使用tcp协议
# 设置复用
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((IP, PORT)) #
server_socket.listen(128)
print("服务已经启动,在{}:{}等待连接...".format(IP, PORT))
while True:
client_socket, client_address = server_socket.accept()
print("{}:{}连接上了".format(*client_address))
handle_client_process = Process(target=handle_client, args=(client_socket,))
handle_client_process.start()
client_socket.close()
```
## 客户端代码
```python
from socket import *
# 指定ip和端口号
IP="127.0.0.1"
SEVER_PORT=8111
# 指定一每次缓存中读取的最大长度
BUFLEN=1024
# 实例化一个socket对象,AF_INET表示在网络层使用IPv4,在传输层使用tcp协议
clientSocket=socket(AF_INET,SOCK_STREAM)
# 连接服务端的地址
clientSocket.connect((IP,SEVER_PORT))
while True:
# 客户端输入信息
toSend='''
{
"mobile_phone":"13367899876",
"pwd":"lemonban"
}
'''
if toSend=="exit":
break
# 发送编码后的消息
clientSocket.send(toSend.encode())
# 等待服务端返回消息,这里不能通过关键字传参
recved=clientSocket.recv(BUFLEN)
if not recved:
print("fanhuiweikong")
break
# 打印解码后的返回消息
print(recved.decode())
break
clientSocket.close()
```