zoukankan      html  css  js  c++  java
  • PDA上一个UDP通讯客户端

    放了个TEXTBOX输入,TEXTBOX多行来记录日志(其实可以简单的用LISTBOX)
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    using System.Xml;
    using System.Net;
    using System.Threading;
    using System.Net.Sockets;

    namespace UDPClient
    {
        
    public partial class FrmMain : Form
        
    {
            
    private FrmSetup _setup;  //设置远程服务器IP
            private UdpClient _udpSend;
            
    private UdpClient _udpReceive;
            
    private Thread _receive;
            
    public delegate void UpdateMsg(String Msg);
            
    public delegate void SendMsg(String Msg);
            
    public UpdateMsg myDelegate;
            
    public SendMsg mySendMsg;

            
    public void UpdateMsgMethod(String Msg)
            
    {

                
    if (Msg.Length == 0)
                
    {

                    Msg 
    = "\"空\"\r\n";
                    
    //tBResult.AppendText("\"空\"\r\n");


                }

                    tBResult.Text 
    = tBResult.Text + Msg;
                    tBResult.SelectionStart 
    = tBResult.TextLength - Msg.Length;
                
                
                tBResult.SelectionLength 
    = 0;
                tBResult.ScrollToCaret();   
                
            }


            
    private void Connect(string ServerIP, Int32 ServerPort)
            
    {
                
    try
                
    {
                    _udpSend.Connect(ServerIP, ServerPort);
                }

                
    catch (Exception ex)
                
    {
                    UpdateMsgMethod( 
    "异常:" + ex.Message.ToString() + "\r\n");
                }

            }



            
    private void Send(string Msg)
            
    {
                
    byte[] sendBytes = Encoding.ASCII.GetBytes(Msg);

                
    try
                
    {


                    _udpSend.Send(sendBytes, sendBytes.Length);
                }

                
    catch (Exception ex)
                
    {

                    UpdateMsgMethod(
    "异常:" + ex.Message.ToString() + "\r\n");
                }


            }


            
    private void ThreadPro()
            
    {



                
    try
                
    {
                    IPEndPoint remotePoint 
    = new IPEndPoint(IPAddress.Any, 0);
                    Byte[] receiveBytes;
                    
    while (true)
                    
    {
                        receiveBytes 
    = _udpReceive.Receive(ref remotePoint);

                        
    string returnData = Encoding.ASCII.GetString(receiveBytes, 0, receiveBytes.Length);

                        
    //tBResult.Text = tBResult.Text + "收到:\"" + returnData + "\"\r\n";
                        if (returnData == "<RETURNSTATE/>")//服务器获取状态的特色命令
                        {
                            
    this.Invoke(this.mySendMsg, new object[] "<RETURNOK/>" });//获取状态
                        }

                        
    else
                        
    {


                            returnData 
    = "收到:\"" + returnData + "\"\r\n";
                            
    this.Invoke(this.myDelegate, new object[] { returnData });
                        }

                    }

                }

                
    catch (Exception ex)
                
    {

                    
    //tBResult.Text = tBResult.Text + ex.Message.ToString() + "\r\n";
                    this.Invoke(this.myDelegate, new object[] {"异常:"+ ex.Message.ToString() + "\r\n" });
                }



            }


            
    public FrmMain()
            
    {
                InitializeComponent();
                _setup 
    = new FrmSetup();
                _udpSend 
    = new UdpClient();
                _udpReceive 
    = new UdpClient(10120);
                _receive 
    = new Thread(new ThreadStart(ThreadPro));
                myDelegate 
    = new UpdateMsg(UpdateMsgMethod);
                mySendMsg 
    = new SendMsg(Send);
            }


            
    private void menuItem3_Click(object sender, EventArgs e)
            
    {
                Close();
            }


            
    private void menuItem2_Click(object sender, EventArgs e)
            
    {
                _setup.ShowDialog();
                Close();
            }


            
    private void FrmMain_Load(object sender, EventArgs e)
            
    {
                
    if (File.Exists("setup.xml"))
                
    {
                    
    //MessageBox.Show("setup.xml");
                    XmlReader _rdoc = XmlReader.Create("setup.xml");
                    
    if (!_rdoc.EOF)
                    
    {
                        
    //MessageBox.Show(_rdoc.ReadElementString());
                        _setup.ServerIP = _rdoc.ReadElementString();  //服务器IP
                        
    //MessageBox.Show(_setup.ServerIP);
                        lbServer.Text = "Server:"+ _setup.ServerIP;
                        Connect(_setup.ServerIP, 
    4660);
                        _receive.Start();
                        tBMsg.SelectAll();
                        tBMsg.Focus();

                    }

                    _rdoc.Close();
                }

                
    else
                
    {
                    _setup.ServerIP 
    = "";
                    _setup.ShowDialog();
                    Close();
                }

            }


            
    private void tBMsg_KeyPress(object sender, KeyPressEventArgs e)
            
    {
                
    if (e.KeyChar == (char)Keys.Enter)
                
    {
                    
    //MessageBox.Show(tBMsg.Text);
                    Send(tBMsg.Text);
                    tBMsg.SelectAll();
                    tBMsg.Focus();
                }

            }


            
    private void FrmMain_Closing(object sender, CancelEventArgs e)
            
    {
                _receive.Abort();
    //必须关闭,否则端口会一直被占用.在虚拟机上看不出的
                _udpReceive.Close();
                _udpSend.Close();
            }


     
     


        }

    }

  • 相关阅读:
    看了支付宝账单,我才知道我是『有钱人』
    用 Pytest+Allure 生成漂亮的 HTML 图形化测试报告
    测试开发城市群,第一站深圳,我们来了!
    测试工作常用 Linux/ Shell 命令之 Bash 逻辑控制基础
    性能测试实战 | JMeter 录制/回放做 App 后端性能压测
    测试圣诞狂欢,万元红包、冲榜豪礼等你拿!
    自动化测试工具 or 自动化策略?孰轻孰重?
    Java 面试题
    疫情之下,普通人高薪就业指南:方向对了,路就不会遥远!
    SharePoint WebPart:扩展SharePoint 2007中图片展示功能
  • 原文地址:https://www.cnblogs.com/enli/p/1234032.html
Copyright © 2011-2022 走看看