python - 使用python套接字中的文本对等发送消息?
问题描述
我正在玩 python 套接字编程以更好地理解它们,并决定使用 p2p 通信。但是我面临一个问题。
你看我有两个代码:peer1 和 peer2。两者都非常简单明了。
同行1:
import socket
import time
from tqdm import tqdm
HOST = '127.0.0.1'
PORT_S = 9090
PORT_R = 8080
client_skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv_skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv_skt.bind((HOST, PORT_R))
serv_skt.listen(1)
for i in tqdm(range(5), desc = 'You have 5 seconds to run the other peer program...'):
time.sleep(1)
client_skt.connect((HOST,PORT_S))
# msg=client_skt.recv(1024)
# msg=msg.decode('utf-8')
# print(msg)
print("waiting for a friend...")
connection, address = serv_skt.accept()
welcome_message = "Welcome to " + HOST + " at " + str(PORT_R)
welcome_message = welcome_message.encode('utf-8')
connection.send(welcome_message)
print("Connection successful: connected to ", address)
while True:
msg=input("Enter your message: \n")
msg=msg.encode("utf-8")
client_skt.sendall(msg)
data = connection.recv(1024).decode('utf-8')
if not data: break
print("Recieved: ", data)
peer2 完全相同,但端口互换:
对等体2:
import socket
import time
from tqdm import tqdm
HOST = '127.0.0.1'
PORT_R = 9090
PORT_S = 8080
serv_skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv_skt.bind((HOST, PORT_R))
serv_skt.listen(1)
for i in tqdm(range(5), desc = 'You have 5 seconds to run the other peer program...'):
time.sleep(1)
client_skt.connect((HOST,PORT_S))
# msg=client_skt.recv(1024)
# msg=msg.decode('utf-8')
# print(msg)
print("waiting for a client...")
connection, address = serv_skt.accept()
welcome_message = "Welcome to " + HOST + " at " + str(PORT_R)
welcome_message = welcome_message.encode('utf-8')
connection.send(welcome_message)
print("Connection successful: connected to ", address)
while True:
data = connection.recv(1024).decode('utf-8')
if not data: break
print("Recieved: ", data)
msg=input("Enter your message: \n")
msg=msg.encode("utf-8")
client_skt.sendall(msg)
connection.close()
大多数人可能已经猜到了:我不能同时运行客户端和服务器,这会引发错误。
解决此问题的一种方法是仅休眠直到服务器绑定。它可以工作,但不能正常退出。
问:有没有其他方法可以解决这个问题?除了上面提到的方法之外,可以使用套接字实现 p2p 吗?
解决方案
推荐阅读
- html - 如何使用引导程序 5 在同一行中制作导航栏和列表
- python - 我想为图像创建保留的整数进行二维数组插值
- angular - 离子无限滚动新推送的图像不加载
- node.js - 以后如何更改猫鼬模式的键?
- html - 为什么'col-md-6'在中间给出太多的空白?
- node.js - 如何使用猫鼬正确塑造发送到 NodeJS 服务器的搜索日期
- python - 如何将 MXDataIter 转换为 DataSet?
- c++ - 将几个 std::collections 输出到 CSV / 行第一次迭代的函数
- python - 如何使用python求解以下方程
- javascript - 在另一个双向数组 Y 中搜索双向数组 X 元素 - Javascript