想用C#做个UDP服务器,求大神指点。。

小弟对于C#刚学
UDP服务器的作用是:能让多个客户端同时对其发送信息(有登录数据包,有传输数据的数据包),并对选定的客户端发送信息。
有两个疑问:
1、byte[] ReceivedByte = udpClient.Receive(ref ipEnd); 用这个数组获取UDP客户端发来的数据(但数据包又存在2种格式,需要对2种格式进行分析并确认回复什么类型的数据包)
但如何做到让数组随时准备好接收每个数据呢,可能由不同客户端发来的(IP不同),最大接收客户端的数量受什么限制??

2、我要对客户端发上来的数据,做一个表格的形式显示在窗口界面,主要由这几项:客户端的ID(数据包中能判断),客户端的IP,客户端的登录时间。。这个如何实现?并且在显示的同时,将这信息输出到TXT中。

求大神指点下用什么方法和函数啊,控件啊可以实现
或者哪位大神有我这种程序差不多的源码,可以参考参考的。谢谢!!
最新回答
夏日梧桐雨

2024-09-18 00:00:14

对第一个问题,你可以这样:做一个while(true)循环,循环内UdpClient 在不停Receive ,接收到 byte[] ReceivedByte 以后,马上建立一个线程去处理接收到的数据,你进入处理ReceivedByte 的线程时,不要直接对ReceivedByte 处理,复制一份过去,这里是继续Receive 的,至于你有几种格式什么的,与UdpClient 的Receive无关了,那是线程做的事情了,while体内继续下一次Receive。而UDP面向无连接,不存在最大客户端数量问题。

第二个问题:你在启动线程同时,ReceivedByte ,IP作为参数进去就可以了
同时建立一个string数组,把你要记录的数据都写到string数组里(写到string数组之后,同时写一下txt文件),再用一个定时器定时把string数组里的东西更新到你要显示的控件里面去。

不存在专门的函数做这些,都要自己实现,
对于线程带参数 格式如下:
new Thread(delegate(){dotask(recivebytecopy,ipaddress)}).start();
dotask实现:
void dotask(byte[] recive,string ipaddress)
{
//你要做的事情

}