1

私は C# 言語で非常に単純な UDP サーバーを実装しています。

コンソール ベースのアプリケーションにサーバーを実装したところ、うまく機能しました。

しかし、Windowsベースのアプリケーションで同じコードを使用して実装すると、

以前のようには機能しません。

スレッドの問題だと推測しました。

そのため、コードにスレッドを付けましたが、まだ機能しません。

「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);
              }
          }
      }
  }
4

1 に答える 1

2

(コンソールウィンドウを介して)何らかの出力を出力することを期待しているように見えます。リッチテキストボックスなどのWindowsフォームコントロールに表示するすべての出力を追加して、次の手順を実行する必要があります。

RichTextbox1.Text += yourInput;
于 2012-04-22T16:05:09.367 に答える