Python UDP套接字服务器

时间:2014-06-23 02:50:28

标签: python sockets udp

我使用python实现了一个UDP套接字服务器。该程序的源代码如下所示。

import socket
port_number = 116 #Checked it with various numbers
addressBar = list();
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)   
server_socket.bind(('localhost', port_number))              
print "UDPServer Waiting for client on port ",port_number
while True:
    dataFromClient, address = server_socket.recvfrom(256)
    if(address not in addressBar):
                addressBar.append(address)
    print dataFromClient
    if(len(addressBar)>1):
                for add in addressBar:
                        if(address != add ):
                                server_socket.sendto(dataFromClient, add)
    else:
        server_socket.sendto("No any connected devices", address)
    print addressBar

此服务器运行正常。但现在我需要这个,成为一个在线服务器。我试图在openShift(https://openshift.redhat.com/app/login?then=%2Fapp%2Fconsole%2Fapplications)中托管它。但它没有成功。我有0个python web应用程序开发经验,所以我需要你的帮助来获得一个想法回合"如何托管这个服务器以及在哪里托管?"

以下源代码显示了应用程序的客户端。

import socket
print "Client"
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)    #This creates socket

while 1:
    data=raw_input("Message:")
    client_socket.sendto(data, ('localhost',117))
    print "Sending request"
    recv_data, addr = client_socket.recvfrom(256)
    print "Message<<Clent2>>",recv_data
client_socket.close()   

1 个答案:

答案 0 :(得分:3)

server_socket.bind(('localhost', port_number))  

这是您的问题 - 您需要绑定到所有接口,否则只有来自同一台计算机的连接才能成功。这样做:

# bind to all interfaces
server_socket.bind(('0.0.0.0', port_number))