【发布时间】:2021-07-21 02:02:58
【问题描述】:
我在两台计算机之间使用 python 中的套接字进行全局连接时遇到了一些问题。我成功地从笔记本电脑连接到在同一网络上工作的计算机。但现在我想和我的朋友联系。(我在控制台中有一个简单的聊天应用程序)
这是一个服务器初始化代码:
import socket
import threading
# print(socket.gethostname())
allmsgs = []
FORMAT = "utf-8"
HEADER = 64
PORT = 5050
SERVER = socket.gethostbyname(socket.gethostname())
ADDR = (SERVER,PORT)
DISCONNECTMESSAGE = "!DISCONNECT"
connections = []
clients = []
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind((ADDR))
#there are more code in this file, but I show only init
这是一个客户端代码:
import socket
from time import sleep
import threading
SERVER = "(my public IP which popped up when i googled it)"
FORMAT = "utf-8"
HEADER = 64
PORT = 5050
DISCONNECTMESSAGE = "!DISCONNECT"
ADDR = (SERVER,PORT)
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
nickname = input("Enter your nickname: ")
try:
if nickname.split()[1] == "devmode":
devmode = True
nickname = nickname.split()[0]
except:devmode = False
while True:
try:
client.connect(ADDR)
print("Succesfully connected")
break
except:
print("Unable to connect.")
print("Next try in 1 sec")
sleep(1)
我有
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it" error on the client's side.
我不确定我是否可以成功连接。 我知道有很多关于这个主题的材料,包括堆栈本身,但我尝试过的没有一个对我没有帮助。
【问题讨论】:
-
你的路由器上设置端口转发了吗?
-
这是什么?我没有这样做。有必要吗?
-
是的,它是;你可以google一下
-
将服务器绑定到 INADDR_ANY,而不是您的本地主机名。
标签: python sockets tcp connection