bs结构socket(udp)通信

来源:互联网 发布:java架构师必备技能 编辑:程序博客网 时间:2024/05/17 01:15

      以前我所做的基于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)            {                           }        }    }
需要考虑并发操作,我在前台有相关操作限制,特殊情况特殊考虑
 

0 0
原创粉丝点击