[英]Unable to assign IP addresses to server/client in Python Socket Programming
我正在處理套接字級別的聊天任務,它要求我有一個服務器來存儲用戶名和 IP 地址和端口號,並將其發送給需要它以啟用它們之間聊天的任何客戶端。 Python 中的套接字編程的新手,所以我很難分配 IP 地址以及從服務器發送到客戶端的 pickle 序列化列表,
服務器端:
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 和端口信息,然后直接聯系其他客戶端(不涉及服務器)。 也想了解字節數組(如果我使用pickle序列化,我可以完全擺脫它們嗎)
我會感謝盡可能多的幫助,但當然不會要求這里的任何人完全編碼,只需向我展示方法並讓我知道我錯在哪里。 好的例子的鏈接將是完美的。
因為,
reply = fd.recvfrom(1000)
返回元組(地址,味精)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.