zoukankan      html  css  js  c++  java
  • bs结构socket(udp)通信

          以前我所做的基于socket通信都是采用cs结构,现公司有一个项目需要在bs中反控设备,于是研究了一番,现将成果公布,方便以后查阅。

          服务端:

          

                #region udp
    
                int recv;
                byte[] data = new byte[1024];
    
                //得到本机IP,设置TCP端口号         
                IPEndPoint ip = new IPEndPoint(IPAddress.Any, 2000);
                Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
    
                //绑定网络地址
                newsock.Bind(ip);
                //等待客户机连接
                Console.WriteLine("This is a Server,Waiting for a client);
    
                //得到客户机IP
                IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
                EndPoint Remote = (EndPoint)(sender);
                recv = newsock.ReceiveFrom(data, ref Remote);
                Console.WriteLine("Message{0}: ", Remote.ToString());
                Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
    
                //客户机连接成功后,发送信息
                string welcome = "hello,sean! ";
    
                //字符串与字节数组相互转换
                data = Encoding.ASCII.GetBytes(welcome);
    
                //发送信息
                newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
                while (true)
                {
                    data = new byte[1024];
                    //发送接收信息
                    recv = newsock.ReceiveFrom(data, ref Remote);
                    Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
                    newsock.SendTo(data, recv, SocketFlags.None, Remote);
                }
            
                #endregion
     bs客户端(实际是发布iis所在的服务器):

        public partial class _Default : System.Web.UI.Page
        {
            string host = "";
            int port = 0;
            protected void Page_Load(object sender, EventArgs e)
            {
               
            }        
            protected void Button2_Click(object sender, EventArgs e)
            {
                
                //int port = 5154;
                //host = "172.16.2.245";
                port = Int32.Parse(this.txt_port.Value.Trim());
                host = this.txt_ip.Value.Trim();
    
                //创建终结点EndPoint
                IPAddress ip = IPAddress.Parse(host);
    
                IPEndPoint ipe = new IPEndPoint(ip, port);   //把ip和端口转化为IPEndPoint的实例
    
                UdpClient sender1 = new UdpClient(); 
                //向服务器发送信息
                string sendStr = this.txt_info.Value; 
                byte[] bs = Encoding.ASCII.GetBytes(sendStr);   //把字符串编码为字节  
                lock (this)
                {
                    sender1.Send(bs, bs.Length, ipe);
                    this.txt_info.Value = "";
                    Thread.Sleep(200);
                    Receive(sender1);
                }            
                
            }
    
            public void Receive(UdpClient sender1)
            {          
    
                IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any,2000);
                try
                {
                    Byte[] receiveBytes = sender1.Receive(ref RemoteIpEndPoint);
    
                    string returnData = Encoding.ASCII.GetString(receiveBytes);
    
                     this.txt_info.Value=("message received " +returnData.ToString());
                }
                catch (Exception e)
                {
                   
                }
            }
    
        }
    需要考虑并发操作,我在前台有相关操作限制,特殊情况特殊考虑
     

    学无先后,达者为师
  • 相关阅读:
    Redis设计与实现第一部分:第5章:Redis 跳跃表
    根据临时表修改主表的某字段数据根据主表的主键
    Redis设计与实现第一部分:第2章:简单动态字符串SDS
    Redis
    MySQL的访问控制与用户管理
    MySQL字符集和语言的基础知识
    生成日志文件
    Python进阶09 动态类型
    Python进阶08 异常处理
    Python进阶07 函数对象
  • 原文地址:https://www.cnblogs.com/seanchang/p/5202742.html
Copyright © 2011-2022 走看看