C# 无法查看任何接收到的数据

C# 无法查看任何接收到的数据,c#,.net,udp,C#,.net,Udp,我正在用C语言实现非常简单的UDP服务器 当我在基于控制台的应用程序上实现服务器时,它运行良好 但当我在基于Windows的应用程序上使用相同的代码实现它时 它不像以前那样工作了 numReceived = udpSocket.ReceiveFrom(buffer, ref remoteEP); 我猜是线的问题 所以我在代码上添加了线程,但仍然不起作用 “ReceiveFrom()函数”的工作方式与以前不同 numReceived = udpSocket.ReceiveFrom(buf

我正在用C语言实现非常简单的UDP服务器

当我在基于控制台的应用程序上实现服务器时,它运行良好

但当我在基于Windows的应用程序上使用相同的代码实现它时

它不像以前那样工作了

  numReceived = udpSocket.ReceiveFrom(buffer, ref remoteEP);
我猜是线的问题

所以我在代码上添加了线程,但仍然不起作用

“ReceiveFrom()函数”的工作方式与以前不同

  numReceived = udpSocket.ReceiveFrom(buffer, ref remoteEP);
我遗漏了什么问题

先谢谢你

  using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Linq;
  using System.Text;
  using System.Windows.Forms;

  using System.Runtime.InteropServices;
  using System.Net;
  using System.Net.Sockets;
  using System.Threading;

  namespace UDP_Server
  {
      public partial class Form1 : Form
      {

          private const int portNum = 5432;

          Socket udpSocket;

          byte[] buffer = new Byte[100];

          public Form1()
          {
              InitializeComponent();
          }

          private void button1_Click(object sender, EventArgs e)
          {
              ThreadStart threadStart = new ThreadStart(onServer);
              Thread thread = new Thread(threadStart);
              thread.Start();
          }

          private void onServer()
          {
              EndPoint localEP = new IPEndPoint(IPAddress.Parse("xxx.xxx.xxx.xxx"), portNum);
              //EndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);

              udpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

              udpSocket.Bind(localEP);

              ThreadStart threadStart1 = new ThreadStart(OnReceive);
              Thread thread1 = new Thread(threadStart1);
              thread1.Start();
              //udpSocket.BeginReceiveFrom(buffer, 0, buffer.Length,
              //SocketFlags.None, ref remoteEP, new AsyncCallback(OnReceive), (object)this);
          }

          private void OnReceive()//IAsyncResult ar)
          {

              int numReceived = 0;
              EndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0);

              Console.WriteLine("UDP Starting Server");
              Console.WriteLine("-----------------------------");

              while (true)
              {
                  numReceived = udpSocket.ReceiveFrom(buffer, ref remoteEP);

                  string s = Encoding.UTF8.GetString(buffer, 0, numReceived);

                  Console.WriteLine("Echo : {0}", s);
              }
          }
      }
  }

看起来您希望它打印一些输出(通过控制台窗口)。您需要添加所有要在windows窗体控件(如富文本框)中显示的输出,然后执行以下操作:

RichTextbox1.Text += yourInput;

这里只是一个评论。。。线中有线?线程并不便宜,从外观上看,你可以在OnServer()上调用OnReceive(),并达到同样的效果。我猜服务器不会接收输入,即使我在客户端发送UDP套接字(在基于控制台的应用程序上工作得很好)。我试图做的是,当服务器从客户机获取输入时,在控制台中编写一行代码。“Console.WriteLine(“Echo:{0}”,s);”是的,控制台应用程序的工作方式与windows窗体稍有不同。如果要显示来自用户的输出,而不是使用Console.WriteLine方法,则需要使用RichTextbox控件并将text属性设置为用户输入,在这种情况下,变量是Console类,如果所讨论的应用程序不是Console应用程序,则其方法不起任何作用:它们不会显示新的控制台,因为Windows控制台的工作方式。