簡體   English   中英

UDP服務器和客戶端無法發送和接收消息

[英]UDP Server and Client Failing to Send And Recieve Messages

我正在使用UDP在Python中建立一個簡單的網絡聊天,但是,當我在一台計算機上運行服務器代碼而在另一台計算機上運行客戶端時,服務器未收到任何消息,服務器腳本也未將任何消息發送回客戶端。 這是我的代碼:

服務器:

import socket, sys

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

sock.bind(('', 9997)) #need higher port

while True:

    x = raw_input("Enter your message: ")
    sent = sock.sendto(x, ('', 9997))
    data, address = sock.recvfrom(4096)
    print data, " ", address

sock.close()

客戶:

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

while True:
    print "Waiting to receive"
    data, server = sock.recvfrom(4096)
    print data
    x = raw_input("Enter message: ")
    sent = sock.sendto(x, server)

sock.close()

有人知道我在這里做錯了嗎? 代碼是否可能很好,但是UDP不夠可靠並且正在丟棄消息?

正如我所說,由於您的代碼似乎還不清楚(至少對我而言),所以我向您發布了一個非常相似的工作示例。
這是服務器

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost', 1932)
sock.bind(server_address)

BUFFER_SIZE = 4096
try:
    while True:
        data, address = sock.recvfrom(BUFFER_SIZE)
        print "Client sends: ", data
        reply = raw_input("Your response:\n")
        sock.sendto(reply,address)
except KeyboardInterrupt:
    sock.close()

服務器創建一個套接字並將其綁定到它的地址和它正在偵聽的端口,在本例中為1932。 他等待傳入的消息,要求答復,然后將其發送回發件人。
這是客戶

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client_address = ('localhost', 1931)

server_address = ('localhost', 1932)

sock.bind(client_address)

BUFFER_SIZE = 4096
try:
    first_msg = raw_input("Your first message:\n")
    sock.sendto(first_msg,server_address)
    while True:
        data, address = sock.recvfrom(BUFFER_SIZE)
        print "Client sends: ", data
        reply = raw_input("Your response:\n")
        sock.sendto(reply,address)
except KeyboardInterrupt:
    sock.close()

它與服務器非常相似,唯一的區別是,它在while循環之前發送了一條消息,以啟動對話。 然后,它就像服務器一樣進入receive/reply循環。 它也具有服務器地址,這是不同的(端口不同,因為我在本地主機上)
這里的try/catch塊只是用來優雅地關閉整個過程。
我在計算機上使用了localhost和其他端口並對其進行了測試,並且可以正常工作。 您只需更改地址即可使其通過LAN工作,並且如果地址不同,則可以保留相同的端口,它應該可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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