将python socket服务端包成exe文件后客户端收不到信息也不结束

hiposy 2020-07-05 08:24:59
## 问题描述

自己用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()

```

...全文
250 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
鑫枫 2021-10-15
  • 打赏
  • 举报
回复

去掉多进程,直接返回消息

hiposy 2020-08-01
  • 打赏
  • 举报
回复
引用 2 楼 金萨巴 的回复:
请问博主解决了吗?我也遇到类似的问题了,python代码可以正常运行,但是打包成exe之后就不行了,查了一天bug确实是socket接收不到sever端的信息
没有,换了一个Flask框架做的server,打包成exe文件后能收发消息
hiposy 2020-08-01
  • 打赏
  • 举报
回复
引用 1 楼 tianfang 的回复:
你的服务器地址是127.0.0.1 ,客户端只能从本机访问,测试可以,正式版肯定不对了
打包成exe文件后也是在我本地运行的,没放到其他环境
金萨巴 2020-07-14
  • 打赏
  • 举报
回复
请问博主解决了吗?我也遇到类似的问题了,python代码可以正常运行,但是打包成exe之后就不行了,查了一天bug确实是socket接收不到sever端的信息
tianfang 2020-07-07
  • 打赏
  • 举报
回复
你的服务器地址是127.0.0.1 ,客户端只能从本机访问,测试可以,正式版肯定不对了

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧