繁体   English   中英

python连接到同一网络上的服务器

[英]python connect to server on same network

我有一个 server.py 和一个 client.py。

如果我使用与 127.0.0.1 相同的端口和主机在同一台计算机上运行它们,则它工作正常。

我将另一台笔记本电脑连接到同一网络。 我得到了我的本地 IP 地址 129.94.209.9 并将其用于服务器。 在另一台笔记本电脑上,我尝试连接到服务器,但无法连接。

这是我的代码、网络的问题还是我只是使用了错误的 IP 地址?

服务器.py

HOST = '129.94.209.9' 
PORT = 9999
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((HOST, PORT))
server_socket.listen(10)
sockfd, addr = server_socket.accept()
send and receive messages etc....

客户端.py

HOST = '129.94.209.9'
PORT = 9999
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    sock.connect((HOST, PORT))
except:
    print("Cannot connect to the server")
send and receive messages etc...

客户端打印“无法连接到服务器”

谢谢!!

更新:感谢您的评论

1) 我确实做了 sockfd, addr = server_socket.accept() 对不起,我忘了添加它,它在代码的后面几行。

2)错误为:[Errno 11] 资源暂时不可用

3)Ping确实有效

编辑:当我通过以太网电缆将两台计算机插入同一个网络时,它现在正在工作。 不知道为什么当它们彼此相邻并连接到 wifi 时我的无法工作。 感谢所有的建议! 我会自己调查网络问题

使用以下代码(当然是我的 IP 地址而不是您的 IP 地址),我看到了预期的行为。

so8srv.py:

import socket
HOST = '192.168.33.64' 
PORT = 9999
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((HOST, PORT))
server_socket.listen(10)
print("Listening")
s = server_socket.accept()
print("Connected")

so8cli.py:

import socket
HOST = '192.168.33.64'
PORT = 9999
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    sock.connect((HOST, PORT))
except Exception as e:
    print("Cannot connect to the server:", e)
print("Connected")

当我运行它时,服务器打印"Listening" 当我然后运行客户端时,它和服务器都打印"Connected"

您会注意到,与您的代码不同,我的客户端不只是为引发的任何异常打印相同的诊断信息,而是报告异常。 作为一个合理的做法,您应该避免使用裸露的except子句,因为无论异常是由编程错误还是由诸如KeyboardInterrupt类的用户操作引起,您的程序都会采取相同的操作。

也可以尝试使用这种结构来获取 IP 地址:

HOST=socket.gethostbyname(socket.gethostname())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM