Udp通讯之服务器及客户端
我坚信付出不一定有回报,但是不付出绝对没有回报,给我选,我毫无办法,只能选择付出,不为别的,只为看到明天冉冉东升的朝阳。废话少说,先从服务器说起
--------udp通讯之服务器
Udp通讯连接非常之简单
先声明几个通用变量
UdpClient client = null;
string receiveString = null;
byte[] receiveData = null;
IPEndPoint remotePoint = new IPEndPoint(IPAddress.Any, 0);
然后开启服务器,进行数据接收
private void button1_Click(object sender, EventArgs e)
{
//
displayMsg("服务器启动完毕,等待接收数据。。。");
Thread td1 = new Thread(()=> {
while (true)
{
receiveData = client.Receive(ref remotePoint);//接收数据
receiveString = Encoding.Default.GetString(receiveData);
displayMsg(remotePoint+"接收到的数据为:" + receiveString);
}
});
td1.IsBackground = true;
td1.Start();
button1.Enabled = false;
}
然后向客户端发送数据
private void button2_Click(object sender, EventArgs e)
{
//发送数据
if (!button1.Enabled&&client!=null)
{
string msg = textBox1.Text.Trim();
byte[] buffer = Encoding.Default.GetBytes(msg);
client.Send(buffer,buffer.Length,remotePoint);
msg = remotePoint.ToString() + "发送的数据为:" + msg;
displayMsg(msg);
}
}
最后做一个数据输出到文本的功能
private void displayMsg(string msg)
{
msgDisplay.Invoke(new Action<string>((s)=> {
msgDisplay.AppendText(s+"\r\n");
}),msg);
}
大功告成。。。。
--------服务器来了,那就再来一个客户端吧
老规矩,先来几个公共变量吧
UdpClient client = null;
IPEndPoint remotePoint;
bool flag = false;
下面就该数据发送了
private void button1_Click(object sender, EventArgs e)
{
try
{
byte[] sendData = Encoding.Default.GetBytes(textBox2.Text.Trim());
client.Send(sendData, sendData.Length, remotePoint);
string msg = "发送的数据为:" + remotePoint + "-->" +client+":"+ Encoding.Default.GetString(sendData);
msgDisplay(msg);
// msgDisplay(Encoding.Default.GetString(client.Receive(ref remotePoint)));
//flag = true;
}
catch(Exception ex)
{
msgDisplay(ex.ToString());
}
}
//在就是一个数据循环接收的程序
private void button2_Click(object sender, EventArgs e)
{
msgDisplay("数据循环接收开启。。。");
Thread td2 = new Thread(()=> {
while (true)
{
try
{
msgDisplay(Encoding.Default.GetString(client.Receive(ref remotePoint)));
}
catch
{
Thread.Sleep(1000);
msgDisplay("服务器未开启,");
// break;
}
}
});
td2.IsBackground = true;
td2.Start();
}
你说要不要搞个数据显示的程序呢 ?那是必须的
private void msgDisplay(string v)
{
textBox1.Invoke(new Action<string>((str)=> {
textBox1.AppendText(str+"\r\n");
}),v);
}
现在应该没有什么话说了把,完美解决!