最近做项目,需要用C#语言写个UDP的底层通讯的类。看了2本书,书上说的都好象简单了些。后来请教了高手一些思路。3个线程:1-用来send数据包;2-用来receive数据包;3-用来判断超时。当数据包send出去后,就把包标识等等信息放到一个链接表中去,然后等候应答。如果1秒种后没收到应答就再send一次,连续3次没收到应答,就把该包从链接表中摘掉,返回一个消息;如果有receive到应答,就到链接表里去找对应的包,找到后返回消息,同时把包从链接表中摘掉。知道思路,可是还是不知道应该怎么写。哪位高手有写过类似的通讯类。请发份到我邮箱:[email protected]          万分感谢!!!!!!!

解决方案 »

  1.   

    Up  谁有源代码。。发一份给我呀[email protected]
      

  2.   

    底层通讯的类?用C++写吧。如果是C#,那么现成的类不是很好用?再说,C#是运行在.Net平台上,去实现底层的东西
      

  3.   

    如果楼主普通英文过关,给你一个链接去看http://www.java2s.com/Code/CSharp/Network/Udp-Client.htm
      

  4.   

    KKND2006,书我是看了2本了,可是真的没什么感觉,书上的代码也是都有很认真的打一遍和理解。个人感觉主要是在异步和链接表这实在不太理解,所以才想看看别人写的例子。ezhuyin() ,谢谢。偶正在看。
      

  5.   

    LZ 是要用UDP的Multicast 发包吗?如果是,可以看这个例子,我当初做Multicast 就是看的这个:http://www.codeproject.com/cs/internet/multicast.asp
    另外还有个Socket异步接收的例子,不知道是否有用,同一个网站上的:http://www.codeproject.com/cs/internet/socketsincs.asp
    E文文章,注册可下源代码.
      

  6.   

    去看看MSDN中的UDP协议通讯吧。不会难的注意  服务端建立监听,监听到之后,抛出一个线程处理事件。
    其他思路,你都说了。这边就不说了
      

  7.   

    ezhuyin(),你给的网站,里面的东西,我在《c#网络应用编程》这本电子书里全看过,也打过一遍代码,可惜好象说的有点简单。RedGoldFish,谢谢你的提醒,也谢谢你给的地址。我不做Multicast发包的,第2个网站的例子我也打过一遍,对异步有一些介绍,但是链接表的问题没应用到哦。sd5923150(),说老实话,网站的MSDN真的很少上,因为每次都是只在里面看到函数或者方法,怎么串起来就不知道了。我是做ASP.NET的,项目要求用C#来写这个通讯类。没办法,以前没接触过。希望大家多给意见啊。。有是我思路写的例子的还请发邮箱。谢谢大家了先!
      

  8.   

    我现在也正在做一个要用SOCKET的项目,通信部分已经做完了,我用的是TCPCLIENT类实现的!!!有兴趣咱们交流交流!
      

  9.   

    newfacegb(),能把你的发份到我邮箱里吗?
      

  10.   

    jacky962848() 我做的思路和你的差不多,只是用类不一样,我是在服务端把要用的数据整理好,并等待接收客户端发来的某种特征码,当收到后就向客户端发送相应的数据,客户端只需要读取和显示就OK了!!!你加我QQ吧!25691
      

  11.   

    我也在做Socket通信,异步方式很好
      

  12.   

    那你加我QQ625906512
    我最近用的是SOCKET 中的TCP
      

  13.   

    public class Server
        {
            private UdpClient udp = new UdpClient(2007);//里面的端口号随意,
            private IPEndPoint remoteEndPoint;
            public string response = "";
            public void receive()//在主程序里面+个后台线程来运行该方法        {
                while (true)//用死循环来监听发的数据包
                {
                    remoteEndPoint = new IPEndPoint(new IPAddress(0), 0);
                    byte[] data = udp.Receive(ref remoteEndPoint);
                    response = Encoding.Default.GetString(data);
                }
            }
        }    public class Client
        {
            private UdpClient client = new UdpClient(); //客户端
            private IPEndPoint serverIP;
            public void send(string IP, string content)
            {//下面的端口是发、到服务器上的,要和Server监听的端口一致
                serverIP = new IPEndPoint(IPAddress.Parse(IP), 2007); //服务器IP
                byte[] mybyte = Encoding.Default.GetBytes(content);
                client.Send(mybyte, mybyte.Length, serverIP);
            }
        }
    //这样了,有什么地方不清楚在问,再者,如此辛苦,可别忘记结帖了...呵呵
      

  14.   

    icdbow(旺仔)  你的方法没有问题,就是楼主在用这个的时候记的用上线程, 不然你的程序可能会卡(在出现丢包的时候)
      

  15.   

    MSDN里的UDP同步通信的例子还可以,异步的真不怎么样,还有就是用UdpClient实现起来比较简单,但换成socket实现我的服务端调用BeginReceiveFrom方法却始终收不到客户端的数据,找了很久还没找到原因,期待有人能指点下,邮箱:[email protected]