python - Client.py 没有连接到 server.py
问题描述
我对 python3 网络(套接字)编程有问题。问题是,当我运行 server.py 时,一切都很好。比我打开client.py,它必须连接到server.py,但它没有连接。它会停留 5-15 秒,然后给出连接错误。我允许访问 python 以使用网络。我不知道为什么它不起作用。
Server.py 代码:
import socket
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '127.0.0.1'
port = 80
Buffer_Size = 1024
socket.bind((host, port))
socket.listen(1)
connectionNumber = 1
print("\n" + "[SERVER] Port" + str(port) + "opened. Connections are listening..." + "\n")
while True:
print("\n" + "*"*50)
print("[SERVER] Waitong connection {}...".format(connectionNumber))
conn, addr = socket.accept()
print("[SERVER] Connected to {}".format(addr))
print("[SERVER] Receiving bytes...")
while True:
msgFromClient = socket.recv(Buffer_Size)
if not msgFromClient:
print("[SERVER] No message received.")
break
print("[CLIENT]: {}".format(msgFromClient))
print("[SERVER] Message received, buffer emptied. " + connectionNumber + "Closing Connection...")
conn.send(str(msgFromClient) + ". You are the client. Thanks for connecting!")
conn.close()
print("[SERVER] Connection closed...")
connectionNumber += 1
client.py 代码:
import getpass
pcName = getpass.getuser()
import socket
clientName = socket.gethostname()
clientIP = socket.gethostbyname(socket.gethostname())
sendingMessageToServer = pcName +"___" + clientName + "___"+ clientIP
import socket
clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '127.0.0.1'
port = 80
Buffer_Size = 1024
clientSocket.connect((host, port))
print("Sending message: {}".format(sendingMessageToServer))
clientSocket.send(sendingMessageToServer)
print("Message Sended Succesfully!")
messageFromServer = clientSocket.recv(Buffer_Size)
print("[SERVER] Received message: {}".format(messageFromServer))
print("[CLIENT SERVER] Message received.. Closing connection...")
clientSocket.close()
解决方案
首先,您应该更改端口 80,因为它由 http 连接使用。也许你的系统正在接管它。设置例如端口 8001。从创建的对象中server.py
获取传入数据,而不是:conn
socket
msgFromClient = conn.recv(Buffer_Size)
通过套接字接收或发送的数据也应该是bytes
类型,str
因此您应该将所有recv
和send
参数更改为字节,例如:
conn.send(msgFromClient + b". You are the client. Thanks for connecting!")
或在client.py
:
clientSocket.send(sendingMessageToServer.encode())
推荐阅读
- ios - iOS 11,无法选择照片
- conda - 安装 oracle-instantclient 与 conda install oracle-instantclient tsnames 的区别
- json - 如何解决 org.json.JSONException:索引没有值
- android - inapp 浏览器无法在 iphone s6 上运行
- java - Spring Boot 静态资源不可用
- unix - bash 在 ls 输出的开头和结尾附加文本
- listview - 选择颜色 JavaFx ListView
- jquery - 在 Spring-Boot 中使用 jQuery 提交 ajax 表单时无法点击控制器方法
- spring-boot - 如何在没有控制器的情况下使用百里香
- postgresql - 更新的用户权限不会反映在 Postgres 的副本中