2017-04-13 91 views
0

我有一个server.py和client.py。python连接到同一网络上的服务器

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

我有另一台笔记本电脑连接到同一个网络。我得到我的本地IP地址129.94.209.9并用于服务器。在另一台笔记本电脑上,我试图连接到服务器,但我不能。

这是我的代码,与网络或我只是使用错误的IP地址的问题?

Server.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.... 

Client.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,地址= server_socket.accept()我忘了补充它,它是在几行代码就进一步下跌。

2)的错误是:[错误11]资源暂时不可

3)坪确实工作

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

+0

首先,你应该删除'try' /'except'或重新引发exceptin看到实际的错误消息。 –

+0

你是否尝试过改变你的'except:'除了Exception之外的东西',例如:'。这可以让你更清楚地看到'print(ex)'的异常情况,并且可以提供更多信息 –

+0

从一台机器到另一台机器是否可以“ping”? – 2017-04-13 07:47:09

回答

1

使用下面的代码(当然,我的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)引起的,您的程序都将采取相同的操作。

+0

谢谢。看起来我们的代码很好,但是我的无线接入点或路由器肯定是做了一些坏事。当我使用以太网电缆而不是WiFi连接笔记本电脑时,它现在正在工作 – Friedpanseller

0

同时尝试使用这种结构来获得IP地址:

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

这通常最终会返回本地主机地址 – holdenweb

+0

请注意这一点。在一台机器上你应该有'gethostbyname()'和另一个“0.0.0.0”。否则两者之间的连接将失败 – 2017-04-13 08:28:52

+0

事实并非如此,听起来像货物信息。在服务器套接字上使用“'0.0.0.0'”来侦听_all available_接口。仅在一个由其IP地址提名的接口上进行监听是完全有效的。绝对不需要使用主机名 - 它们仅仅是人类用户的便利。 – holdenweb