c# UDP通訊

來源:互聯網
上載者:User

標籤:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Net.Sockets;using System.Net;using System.Threading;namespace WindowsFormsApplication1{    public partial class Form1 : Form    {        private UdpClient sendUdpClient;        private UdpClient receiveUpdClient;        public Form1()        {            InitializeComponent();            IPAddress[] ips = Dns.GetHostAddresses("");            tbxlocalip.Text = ips[0].ToString();            int port = 51883;            tbxlocalPort.Text = port.ToString();            tbxSendtoIp.Text = ips[0].ToString();           tbxSendtoport.Text = port.ToString();        }        private void Form1_Load(object sender, EventArgs e)        {            Control.CheckForIllegalCrossThreadCalls = false;        }        private void button1_Click(object sender, EventArgs e)        {            if (tbxMessageSend.Text == string.Empty)            {                MessageBox.Show("發送內容不可為空", "提示");                return;            }            // 選擇發送模式            if (chkbxAnonymous.Checked == true)            {                // 匿名模式(通訊端綁定的連接埠由系統隨機分配)                sendUdpClient = new UdpClient(0);            }            else            {                // 實名模式(通訊端綁定到本地指定的連接埠)                IPAddress localIp = IPAddress.Parse(tbxlocalip.Text);                IPEndPoint localIpEndPoint = new IPEndPoint(localIp, int.Parse(tbxlocalPort.Text));                sendUdpClient = new UdpClient(localIpEndPoint);            }            Thread sendThread = new Thread(SendMessage);            sendThread.Start(tbxMessageSend.Text);        }                       private void SendMessage(object obj)        {            string message = (string)obj;            byte[] sendbytes = Encoding.Unicode.GetBytes(message);            IPAddress remoteIp = IPAddress.Parse(tbxSendtoIp.Text);            IPEndPoint remoteIpEndPoint = new IPEndPoint(remoteIp, int.Parse(tbxSendtoport.Text));            sendUdpClient.Send(sendbytes, sendbytes.Length, remoteIpEndPoint);            sendUdpClient.Close();            // 清空發送訊息框            //ResetMessageText(tbxMessageSend);        }        delegate void ShowMessageforViewCallBack(ListBox listbox, string text);        private void ShowMessageforView(ListBox listbox, string text)        {            if (listbox.InvokeRequired)            {                ShowMessageforViewCallBack showMessageforViewCallback = ShowMessageforView;                listbox.Invoke(showMessageforViewCallback, new object[] { listbox, text });            }            else            {                lstbxMessageView.Items.Add(text);                lstbxMessageView.SelectedIndex = lstbxMessageView.Items.Count - 1;                lstbxMessageView.ClearSelected();            }        }        //delegate void ResetMessageCallback(TextBox textbox);        //private void ResetMessageText(TextBox textbox)        //{        //    // Control.InvokeRequired屬性代表        //    // 如果控制項的處理與調用線程在不同線程上建立的,則為true,否則為false        //    if (textbox.InvokeRequired)        //    {        //        ResetMessageCallback resetMessagecallback = ResetMessageText;        //        textbox.Invoke(resetMessagecallback, new object[] { textbox });        //    }        //    else        //    {        //        textbox.Clear();        //        textbox.Focus();        //    }        //}        private void button4_Click(object sender, EventArgs e)        {            // 建立接收通訊端            IPAddress localIp = IPAddress.Parse(tbxlocalip.Text);            IPEndPoint localIpEndPoint = new IPEndPoint(localIp, int.Parse(tbxlocalPort.Text));            receiveUpdClient = new UdpClient(localIpEndPoint);            Thread receiveThread = new Thread(ReceiveMessage);            receiveThread.Start();        }        private void ReceiveMessage()        {            IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);            while (true)            {                try                {                    // 關閉receiveUdpClient時此時會產生異常                    byte[] receiveBytes = receiveUpdClient.Receive(ref remoteIpEndPoint);                    string message = Encoding.Unicode.GetString(receiveBytes);                    // 顯示訊息內容                    ShowMessageforView(lstbxMessageView, string.Format("{0}[{1}]", remoteIpEndPoint, message));                }                catch                {                    break;                }            }        }        private void button3_Click(object sender, EventArgs e)        {            receiveUpdClient.Close();        }        private void button2_Click(object sender, EventArgs e)        {            this.lstbxMessageView.Items.Clear();        }    }}

  

 

c# UDP通訊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.