## 問題描述
自己用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()
```
uj5u.com熱心網友回復:
你的服務器地址是127.0.0.1 ,客戶端只能從本機訪問,測驗可以,正式版肯定不對了uj5u.com熱心網友回復:
請問博主解決了嗎?我也遇到類似的問題了,python代碼可以正常運行,但是打包成exe之后就不行了,查了一天bug確實是socket接收不到sever端的資訊uj5u.com熱心網友回復:
打包成exe檔案后也是在我本地運行的,沒放到其他環境
uj5u.com熱心網友回復:
沒有,換了一個Flask框架做的server,打包成exe檔案后能收發訊息
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/18195.html
上一篇:幫我把陣列內容生成一個sql檔案
下一篇:Matlab 請問有沒有intlab_V9以上的版本,主要想用到affine arithmetic package,分享一下,感謝
