2012-07-05 43 views
5

我正在使用这两个程序在两台计算机之间进行通信,一台是我登录的计算机,另一台计算机没有返回任何内容。它只是运行没有发送任何两台计算机之间使用python套接字进行通信

客户

import sys 
from socket import socket, AF_INET, SOCK_DGRAM 

SERVER_IP = '127.0.0.1' 
PORT_NUMBER = 5000 
SIZE = 1024 
print ("Test client sending packets to IP {0}, via port {1}\n".format(SERVER_IP, PORT_NUMBER)) 

mySocket = socket(AF_INET, SOCK_DGRAM) 

while True: 
     mySocket.sendto('cool',(SERVER_IP,PORT_NUMBER)) 
sys.exit() 

服务器

from socket import socket, gethostbyname, AF_INET, SOCK_DGRAM 
import sys 
PORT_NUMBER = 5000 
SIZE = 1024 

hostName = gethostbyname('0.0.0.0') 

mySocket = socket(AF_INET, SOCK_DGRAM) 
mySocket.bind((hostName, PORT_NUMBER)) 

print ("Test server listening on port {0}\n".format(PORT_NUMBER)) 

while True: 
     (data,addr) = mySocket.recvfrom(SIZE) 
     print data 
sys.ext() 

什么可能我是做错了什么?

回答

6

的问题是在客户端的地址:

SERVER_IP = '127.0.0.1' 

您正在连接到本地计算机和发送数据,而你的服务器是坐在不同的IP。您需要连接到服务器IP或主机名。

您可以通过客户端连接第一验证这一点(如果它不能失败)

... 

import time 

mySocket = socket(AF_INET, SOCK_DGRAM) 
mySocket.connect((SERVER_IP,PORT_NUMBER)) 

while True: 
     mySocket.send('cool') 
     time.sleep(.5) 

从评论

因为你是一个WiFi连接上的更新,这意味着这两个机器在本地网络上。您需要找到服务器的LAN IP地址,以将其指定为目标。

命令行的方法来找到你的IP

  • OSX/Linux的:ifconfig
  • 的Windows:ipconfig /all
+0

我曾经在whatismyip.com的地址,并产生同样的结果 – user1340048 2012-07-05 22:38:32

+0

@ user1340048:那是你的公网IP。除非你已经设置你的路由器将端口上的流量转发到你的服务器上,否则这不会对你有很大帮助。使用本地网络ips。这两台机器位于两个不同的网络位置吗? – jdi 2012-07-05 22:43:43

+0

不,他们在同一无线连接上。我在哪里可以找到正确的本地IP?我曾尝试使用SERVER_IP ='' – user1340048 2012-07-05 23:01:19

0

如果不改变SERVER_IP到真实服务器的地址后,甚至工作,请检查服务器上的防火墙是否接受端口5000上UDP的流量。

如果您的服务器是Linux机器,iptables -L会显示你的防火墙规则。 iptables -F会删除所有(!)防火墙规则,所以你可以测试是否有帮助。这不是重新启动持久性。

+0

它仍然无法正常工作,并且防火墙表示它允许一切。 – user1340048 2012-07-05 22:38:10

0

你应该看到这样的局域网IP地址:192.168.1.102这是通常的WiFi路由器默认本地地址。例如,你会看到在窗口下面的命令提示符下使用IPCONFIG:

C:\Users\jackc>ipconfig 

Windows IP Configuration 

Wireless LAN adapter Wireless Network Connection 3: 

    Media State . . . . . . . . . . . : Media disconnected 
    Connection-specific DNS Suffix . : 

Wireless LAN adapter Wireless Network Connection: 

    Connection-specific DNS Suffix . : 
    Link-local IPv6 Address . . . . . : fe80::ed97:91a4:9449:204b%13 
    IPv4 Address. . . . . . . . . . . : 192.168.8.106 
    Subnet Mask . . . . . . . . . . . : 255.255.255.0 
    Default Gateway . . . . . . . . . : 192.168.8.1 

我尝试以下测试代码对我的作品。

客户:

#!/usr/bin/env python3 

import sys 
from socket import socket, AF_INET, SOCK_DGRAM 

SERVER_IP = '192.168.8.102' 
PORT_NUMBER = 5000 
SIZE = 1024 
print ("Test client sending packets to IP {0}, via port {1}\n".format(SERVER_IP, PORT_NUMBER)) 

mySocket = socket(AF_INET, SOCK_DGRAM) 
myMessage = "Hello!" 
myMessage1 = "" 
i = 0 
while i < 10: 
    mySocket.sendto(myMessage.encode('utf-8'),(SERVER_IP,PORT_NUMBER)) 
    i = i + 1 

mySocket.sendto(myMessage1.encode('utf-8'),(SERVER_IP,PORT_NUMBER)) 

sys.exit() 

服务器:

#!/usr/bin/env python3 

from socket import socket, gethostbyname, AF_INET, SOCK_DGRAM 
import sys 
PORT_NUMBER = 5000 
SIZE = 1024 

hostName = gethostbyname('0.0.0.0') 

mySocket = socket(AF_INET, SOCK_DGRAM) 
mySocket.bind((hostName, PORT_NUMBER)) 

print ("Test server listening on port {0}\n".format(PORT_NUMBER)) 

while True: 
    (data,addr) = mySocket.recvfrom(SIZE) 
    print data 
sys.exit() 
相关问题