无法在Python套接字编程中为服务器/客户端分配IP地址

时间:2017-09-13 22:47:28

标签: python sockets network-programming udp

我正在进行套接字级别的聊天分配,这需要我拥有一个存储用户名和IP地址和端口号的服务器,并将其发送给需要它的任何客户端以启用它们之间的聊天。 在Python中使用套接字编程的新手,所以我很难分配IP地址,并且还要挑选从服务器发送到客户端的序列化列表,

服务器端:

import pickle
import socket
udp_ip = '127.0.0.1'
udp_port = 8014
fd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
fd.bind((udp_ip,udp_port))
x=[]

while True:
    r = fd.recvfrom(2048)
    x.append(r)
    print x
    datas=pickle.dumps(x)
    reply = r[0]
    client_address = r[1]
    #fd.sendto(bytearray(reply,"utf-8"), client_address)
    fd.sendto(datas,client_address)

客户方:

import pickle
import socket
fd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM )


fd.getsockname()
udp_ip = '127.0.0.1'
udp_port = 8014
b=[]


print "SIGN-IN"
message= raw_input("USERNAME :")
fd.sendto(message, (udp_ip, udp_port))
while(True):
    reply = fd.recvfrom(1000)
    list1=raw_input("\n").lower().strip()
    if list1=="list":
         a=pickle.loads(reply)
         b.append(a)
         print "Here is the list of IP addr and ports",a
    else:
        print("Sorry didn't get that.")

问题1-需要弄清楚如何为客户端和服务器分配正确的IP地址。除localhost之外的任何其他IP都会返回错误,`ERRNO99无法分配请求的地址。

问题2- Pickle序列化非常棒,我正试图从服务器到客户端获取列表x,但它在客户端抛出错误,

`File"client1.py", line 21, in <module>
        a=pickle.loads(reply)
      File "/usr/lib/python2.7/pickle.py", line 1387, in loads
        file = StringIO(str)
    TypeError: StringIO() argument 1 must be string or buffer, not tuple

问题3-我仍然试图了解客户端如何能够从服务器列表中检索其他客户端的ip和端口信息,然后直接联系其他客户端(不涉及服务器)。还想了解bytearrays(如果我使用pickle序列化,我可以完全摆脱它们)

我会尽可能多地感谢你的帮助,但不要问任何人在这里完全编码,只是告诉我的方式,让我知道我错在哪里。良好范例的链接将是完美的。

1 个答案:

答案 0 :(得分:-2)

因为

reply = fd.recvfrom(1000)

返回元组(地址,味精)