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