为什么我的python套接字不能连接到另一台计算机?
所以我最近开始测试套接字,我设法创建了一个服务器和客户端,当我在同一台PC上运行它们时,它们都在一起工作。但是,当我把服务器放在一台不同的计算机上时,它给了我以下错误:“”TimeoutError:[WinError 10060]连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,连接的主机未能响应 “”为什么我的python套接字不能连接到另一台计算机?
这里是我的服务器:
import socket
import pyautogui
import os
computerIP = socket.gethostbyname(socket.gethostname())
def Main():
host = computerIP
port = 5000
value = 0
mySocket = socket.socket()
mySocket.bind((host,port))
mySocket.listen(1)
conn, addr = mySocket.accept()
print ("Connection from: " + str(addr))
while True:
data = conn.recv(1024).decode()
if not data:
break
elif data == "shift":
pyautogui.keyDown("shift")
elif data == "relshift":
pyautogui.keyUp("shift")
elif data == "logout":
os.popen("shutdown -l")
elif data == "click":
pyautogui.click()
pyautogui.click()
print ("from connected user: " + str(data))
data = str(data).upper()
print ("sending: " + str(data))
conn.send(data.encode())
conn.close()
if __name__ == '__main__':
Main()
我的客户:
import socket
def Main():
host = #same ip as server
port = 5000
mySocket = socket.socket()
mySocket.connect((host,port))
message = input(" -> ")
while message != 'q':
mySocket.send(message.encode())
data = mySocket.recv(1024).decode()
print ('Received from server: ' + data)
message = input(" -> ")
mySocket.close()
if __name__ == '__main__':
Main()
操作系统:Windows 8.1 Python的优化版本:3.4
我试过在互联网上看这个,但因为我很新的python我不明白。
告诉我,如果有什么我需要清理。
看起来端口由于某些防火墙而被阻塞。
使用socket.connect_ex()
而不是socket.connect()
。如果连接成功,它将返回0,否则errno变量的值将帮助您调试连接失败的原因。
在连接之前还使用socket.settimeout()
以便连接在给定的时间内没有超时。秒。
socket.settimeout()给了我以下错误:类型错误:的setTimeout()接受(给出0)只有一个参数,我添加它mySocket.connect_ex((主机,端口)) – Lojas
权下,你必须提供没有。秒作为参数。对于ex - 'socket.settimeout(5)' –
那么,我仍然没有连接到服务器,但是,错误更改为以下内容:文件“C:\ Users \ Lojas \ Desktop \ client.py” ,第15行,在主 mySocket.send(message.encode()) socket.timeout:超时,当我删除socket.settimeout()我得到这个:OSError:[WinError 10057]请求发送或接收数据被禁止,因为套接字未连接,并且(当使用sendto调用在数据报套接字上发送时)没有提供地址 – Lojas
如果通过客户端从PC访问,主机上的端口5000似乎被防火墙阻止。 – MKesper
那么我该怎么做呢? – Lojas
Lojas,你可以使用'telnet'来检查服务器端口是否可以从客户端访问。 –