为什么';我的python套接字不能连接到另一台计算机吗?

为什么';我的python套接字不能连接到另一台计算机吗?,python,python-3.x,sockets,server,client,Python,Python 3.x,Sockets,Server,Client,因此,我最近开始测试套接字,并成功创建了一个服务器和客户端,当我在同一台pc上运行它们时,它们都在一起工作。但是,当我将服务器放在不同的计算机上时,会出现以下错误:“TimeoutError:[WinError 10060]连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应“” 这是我的服务器: import socket import pyautogui import os computerIP = socket.gethostbyname(sock

因此,我最近开始测试套接字,并成功创建了一个服务器和客户端,当我在同一台pc上运行它们时,它们都在一起工作。但是,当我将服务器放在不同的计算机上时,会出现以下错误:“TimeoutError:[WinError 10060]连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应“”

这是我的服务器:

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 PythonVerion:3.4

我试着在互联网上查找这个,但是因为我对python还很陌生,所以我不太了解


告诉我是否有任何需要清除的内容。

该端口似乎由于防火墙而被阻止

使用
socket.connect\u ex()
代替
socket.connect()
。如果连接成功,它将返回0,否则errno变量的值将帮助您调试连接失败的原因


在连接之前,还要使用
socket.settimeout()
,以便连接在给定的秒数内超时。

如果通过客户端从您的PC访问主机上的端口5000,则它似乎被防火墙阻止。那么我该怎么办呢?Lojas,您可以使用
telnet
检查是否可以从客户端访问服务器端口。@VikasTiwari但是当连接失败时我该怎么办?尝试不同的端口还是什么?如果连接失败,通常意味着端口被防火墙阻止,这就是连接超时的原因。防火墙可以是网络防火墙、应用程序防火墙或系统防火墙。在最简单的情况下,它可能只是一个windows防火墙。尝试打开端口以允许对端口的传入访问。socket.settimeout()给我以下错误:TypeError:settimeout()只接受一个参数(给定0)我将它添加到mySocket.connect_ex((主机,端口))下。对,您必须提供秒数作为参数。对于ex-
socket.settimeout(5)
嗯,我仍然没有连接到服务器,但是,错误更改为:文件“C:\Users\Lojas\Desktop\client.py”,第15行,在mySocket.send(message.encode())socket.timeout:超时,当我删除socket.settimeout()时,我得到这个:OSError:[WinError 10057]不允许发送或接收数据的请求,因为套接字未连接,并且(使用sendto调用在数据报套接字上发送时)未提供任何地址。请检查安装的防病毒、Windows防火墙或任何其他防火墙(在运行套接字服务器的计算机上)并确保它们都允许端口5000。试试谷歌搜索——“如何在windows 10中打开端口”