簡體   English   中英

UDP 客戶端未收到響應

[英]UDP client isn't receiving a response

我正在為 python 腳本和 WinForm 應用程序之間的數據傳輸創建一個解決方案。 我目前的問題是,當接收到數據並生成並發回接收到的消息時,python 腳本永遠看不到它。

在我引入異步功能之前它一直在工作,但我想用它來關閉正在處理服務器的服務器/線程。

這是我的服務器代碼(C#):

private void btnConnect_Click(object sender, EventArgs e)
        {
            InitializeUDP();
        }

        public void InitializeUDP()
        {
            //Create the server
            endPoint = new IPEndPoint(IPAddress.Any, PORT);
            udpClient = new UdpClient(endPoint);

            ShowMsg("Waiting for a client...");
            //Create the client end.

            //Start listening
            listenThread = new Thread(new ThreadStart(Listening));
            listenThread.Start();
        }
        private void Listening()
        {
            byte[] resp;

            //Listening loop
            Task.Run(async () =>
            {
                while (true)
                {
                    //Receive a message from a client
                    var data = await udpClient.ReceiveAsync();
                    string receivedMsg = Encoding.ASCII.GetString(data.Buffer);
                    //Show the message.
                    this.Invoke(new ShowMessageMethod(ShowMsg), new object[] { "Client:" + receivedMsg });
                    //Send a response message
                    resp = Encoding.ASCII.GetBytes("Server:" + receivedMsg);
                    udpClient.Send(resp, resp.Length, endPoint);
                    //Sleep for UI to work
                    Thread.Sleep(500);
                }
            });
        }
        private void ShowMsg(string msg)
        {
            this.tbTest.Invoke((MethodInvoker)(() => this.tbTest.Text += msg + "\r\n"));
        }

        private void btnDisconnect_Click(object sender, EventArgs e)
        {
            Stop();
        }
        private void Stop()
        {
            //Stop listening
            ShowMsg("Server stopping...");
            udpClient.Close();
            ShowMsg("Server stopped.");
        }

這是我的客戶端代碼(python):

import socket

msgFromClient       = "Hello UDP Server"
bytesToSend         = str.encode(msgFromClient)
serverAddressPort   = ("127.0.0.1", 12345)
bufferSize          = 1024

# Create a UDP socket at client side

UDPClientSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)

# Send to server using created UDP socket

UDPClientSocket.sendto(bytesToSend, serverAddressPort)

msgFromServer = UDPClientSocket.recvfrom(bufferSize)

msg = "Message from Server {}".format(msgFromServer[0])

print(msg)

您正在將數據包發送到地址IPAddress.Any和服務器的端口,而不是客戶端的 IP 地址和端口。

客戶端的 IP 地址和端口存儲在data.RemoteEndPoint中。

如何找到它:注意ReceiveAsync返回一個Task<UdpReceiveResult> - UdpReceiveResult是任務的“返回類型” - await等待任務完成然后給你UdpReceiveResult 然后看到UdpReceiveResult有一個名為RemoteEndPoint的字段,這就是您想要的。

暫無
暫無

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

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