局域网通讯工具——网络编程

本文介绍了一种基于UDP协议的简易即时通讯工具的设计方法。通过使用C#编程语言,实现了发送与接收数据的功能。文中详细解释了如何创建监听器及发送消息,并提供了具体的代码示例。
终于忍受不了每次都布置《XX管理系统》这样的东西了,同学们,让我们玩点传统的。民意结果出来了,题目分别是:像飞鸽传书那样的即时通讯工具、影音播放器、系统维护工具、后门木马、俄罗斯方块游戏、淘宝那样的网站。后悔了,头大了。没办法,只好再次回到N年前,当我还年青的时候,谁能想到还有今天的色戒……
 
 
飞鸽传书的源代码我曾经拜读过,说实话,没有读明白。而今,我们用最简单的办法实现吧。那就是把侦听和发送都放到同一端,也就是即不断侦听,又可以发送出去数据。
要使用 UDP 发送数据文报,必须知道承载所需服务的网络设备的网络地址以及该服务用于通信的 UDP 端口号。
下面这段代码演示了监听演示:
        public void StartListenerConsoleDemo()
        {
            bool done = false;
            UdpClient listener = new UdpClient(listenPort);
            IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);
            try
            {
                while (!done)
                {
                    Console.WriteLine("Waiting for broadcast");
                    byte[] bytes = listener.Receive(ref groupEP);//注意在这里线程会挂起
                    Console.WriteLine("Received broadcast from {0} :\n {1}\n",
                        groupEP.ToString(),
                        Encoding.UTF8.GetString(bytes, 0, bytes.Length));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            finally
            {
                listener.Close();
            }
        }
其中listenPort表示监听端口号,以下雷同。发送代码演示如下,注意为了兼容汉字,最好用UTF8代码:
        public void Send(string toIP,string message)
        {
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPAddress broadcast = IPAddress.Parse(toIP);
            byte[] sendbuf = Encoding.UTF8.GetBytes(message);
            IPEndPoint ep = new IPEndPoint(broadcast, listenPort);
            s.SendTo(sendbuf, ep);
        }
既然监听和发送模块都有了,剩下的就是组合了。监听功能当然要时刻监听,这就是为什么耳朵不能关闭,而眼睛可以。分给它一个线程,不间断监听。OK了。
但是在退出程序时,用Thread的join方法却结束不了线程,当然是因为监听线程在Receive地方挂住了,所以可以给自己发个空数据Send("127.0.0.1", "")来结束
 
(完)









本文转自 王杰瑞 51CTO博客,原文链接:http://blog.51cto.com/wangjierui/55877,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值