簡體   English   中英

無法在 Python 套接字編程中為服務器/客戶端分配 IP 地址

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM