您的位置:首页 > 理论基础 > 计算机网络

UDP SOCKET网络通信 C#

2016-04-29 10:37 495 查看
接收端

using System;

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Threading;

using System.Windows.Forms;

namespace UDPReceiveTest

{

public partial class Form1 : Form

{

public Thread UdpThread;

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

string strHostIP = "";

IPHostEntry oIPHost = Dns.GetHostEntry(Environment.MachineName);

if (oIPHost.AddressList.Length > 0)

strHostIP = oIPHost.AddressList[0].ToString();

this.txtIP.Text = strHostIP;

if (UdpThread != null)

{

UdpThread.Abort();

Thread.Sleep(TimeSpan.FromMilliseconds(500d));

}

try

{

UdpThread = new Thread(new ThreadStart(UdpReciveThread));

UdpThread.Start();

}

catch (Exception y)

{

MessageBox.Show(this, y.Message, "Error", MessageBoxButtons.OK,MessageBoxIcon.Error);

this.Dispose(true);

}

}

private void button1_Click(object sender, EventArgs e)

{

txtMessage.Text = string.Empty;

}

delegate void SetTextCallback(IPEndPoint remoteHost, byte[] buf, string bufs);

//接收数据线程

void UdpReciveThread()

{

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp);

IPEndPoint iep = new IPEndPoint(IPAddress.Any, int.Parse(txtPort.Text));//接收广播信息,端口是(因为是广播端口是)

socket.Bind(iep);

EndPoint ep = (EndPoint)iep;

Byte[] bytes = new byte[1024];

while (Thread.CurrentThread.ThreadState.Equals(ThreadState.Running))

{

int message = socket.ReceiveFrom(bytes, ref ep);//接收发送的信息

string bufs = Encoding.UTF8.GetString(bytes);

txtMessage.Text += (ep as IPEndPoint).Address.ToString() + "说:" +Environment.NewLine;

txtMessage.Text += bufs + Environment.NewLine + Environment.NewLine;

}

txtMessage.Text += "结束..." + (char)13;

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

try

{

UdpThread.Abort();

}

catch

{

}

}

}

}


发送端

using System;

using System.Net;

using System.Net.Sockets;

using System.Text;

using System.Windows.Forms;

namespace UDPSendTest

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void btnSend_Click(object sender, EventArgs e)

{

Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp);

IPEndPoint iep1 = new IPEndPoint(IPAddress.Parse(txtIP.Text),int.Parse(txtPort.Text));//进行地址的广播,广播端口

byte[] data = Encoding.ASCII.GetBytes(txtMessage.Text);

sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);

sock.SendTo(data, iep1);//发送字符

sock.Close();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: