UDP协议下内网与公网IP进行发送消息,一对多.且选择不同的客户端发送消息
2010-03-29 12:51
399 查看
客户端代码:
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.Net.Sockets;
using System.Threading;
using System.Net;
namespace p2p
{
public partial class Form1 : Form
{
private Thread th;
private UdpClient tcpl;
public bool listenerRun = true;
Socket s;
//listenerRun为true,表示可以接受连接请求,false则为结束程序
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
public void Stop()
{
tcpl.Close();
th.Abort();//终止线程
MessageBox.Show("结束监听....");
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
th = new Thread(new ThreadStart(Listen));//新建一个用于监听的线程
th.Start();//打开新线程
}
private void Listen()
{
try
{
tcpl = new UdpClient(5656);//在5656端口新建一个TcpListener对象
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 5656);
MessageBox.Show("正在监听中....");
while (listenerRun)//开始监听
{
Byte[] stream = new Byte[80];
stream = tcpl.Receive(ref groupEP);
MessageBox.Show(groupEP.ToString() + System.Text.Encoding.UTF8.GetString(stream));
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void button3_Click(object sender, EventArgs e)
{
th = new Thread(new ThreadStart(Send));//新建一个用于监听的线程
th.Start();//打开新线程
}
public void Send()
{
try
{
s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPAddress broadcast = IPAddress.Parse(this.textBox3.Text.Trim());
byte[] sendbuf = Encoding.UTF8.GetBytes(this.textBox2.Text.Trim());
IPEndPoint ep = new IPEndPoint(broadcast, 5270);
s.Connect(ep);
s.SendTo(sendbuf, ep);
while (true)
{
byte[] data = new byte[2048];
int rect = s.Receive(data);
byte[] chat = new byte[rect];
Buffer.BlockCopy(data, 0, chat, 0, rect);
textBox1.AppendText(System.Text.Encoding.Default.GetString(chat));
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
}
}
private void button2_Click(object sender, EventArgs e)
{
Stop();
}
}
}
服务端代码:
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.Net.Sockets;
using System.Threading;
using System.Net;
using System.Collections;
namespace p2pserver
{
public partial class Form1 : Form
{
private Thread th;
private UdpClient tcpl;
public bool listenerRun = true;
private ArrayList pclient;//
IPEndPoint groupEP;
public Form1()
{
InitializeComponent();
this.button2.Enabled = false;
Control.CheckForIllegalCrossThreadCalls = false;
}
private void Listen()
{
try
{
tcpl = new UdpClient(5270);//在5656端口新建一个TcpListener对象
groupEP = new IPEndPoint(IPAddress.Any, 5270);
pclient = new ArrayList();
while (listenerRun)//开始监听
{
pclient.Add(groupEP);
Byte[] stream = new Byte[80];
stream = tcpl.Receive(ref groupEP);
this.textBox1.AppendText(groupEP.ToString() + System.Text.Encoding.UTF8.GetString(stream));
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
}
}
public void Stop()
{
try
{
tcpl.Close();
th.Abort();//终止线程
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
this.button1.Enabled = false;
this.button2.Enabled = true;
th = new Thread(new ThreadStart(Listen));//新建一个用于监听的线程
th.Start();//打开新线程
}
private void button2_Click(object sender, EventArgs e)
{
this.button2.Enabled = false;
this.button1.Enabled = true;
Stop();
}
private void button3_Click(object sender, EventArgs e)
{
try
{
int index = int.Parse(this.textBox3.Text.Trim());
byte[] bytesMsg = Encoding.Default.GetBytes(this.textBox2.Text.Trim());
IPEndPoint sc = (IPEndPoint)pclient[index];
tcpl.Send(bytesMsg, bytesMsg.Length, sc);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
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.Net.Sockets;
using System.Threading;
using System.Net;
namespace p2p
{
public partial class Form1 : Form
{
private Thread th;
private UdpClient tcpl;
public bool listenerRun = true;
Socket s;
//listenerRun为true,表示可以接受连接请求,false则为结束程序
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
public void Stop()
{
tcpl.Close();
th.Abort();//终止线程
MessageBox.Show("结束监听....");
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
th = new Thread(new ThreadStart(Listen));//新建一个用于监听的线程
th.Start();//打开新线程
}
private void Listen()
{
try
{
tcpl = new UdpClient(5656);//在5656端口新建一个TcpListener对象
IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 5656);
MessageBox.Show("正在监听中....");
while (listenerRun)//开始监听
{
Byte[] stream = new Byte[80];
stream = tcpl.Receive(ref groupEP);
MessageBox.Show(groupEP.ToString() + System.Text.Encoding.UTF8.GetString(stream));
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void button3_Click(object sender, EventArgs e)
{
th = new Thread(new ThreadStart(Send));//新建一个用于监听的线程
th.Start();//打开新线程
}
public void Send()
{
try
{
s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPAddress broadcast = IPAddress.Parse(this.textBox3.Text.Trim());
byte[] sendbuf = Encoding.UTF8.GetBytes(this.textBox2.Text.Trim());
IPEndPoint ep = new IPEndPoint(broadcast, 5270);
s.Connect(ep);
s.SendTo(sendbuf, ep);
while (true)
{
byte[] data = new byte[2048];
int rect = s.Receive(data);
byte[] chat = new byte[rect];
Buffer.BlockCopy(data, 0, chat, 0, rect);
textBox1.AppendText(System.Text.Encoding.Default.GetString(chat));
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
}
}
private void button2_Click(object sender, EventArgs e)
{
Stop();
}
}
}
服务端代码:
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.Net.Sockets;
using System.Threading;
using System.Net;
using System.Collections;
namespace p2pserver
{
public partial class Form1 : Form
{
private Thread th;
private UdpClient tcpl;
public bool listenerRun = true;
private ArrayList pclient;//
IPEndPoint groupEP;
public Form1()
{
InitializeComponent();
this.button2.Enabled = false;
Control.CheckForIllegalCrossThreadCalls = false;
}
private void Listen()
{
try
{
tcpl = new UdpClient(5270);//在5656端口新建一个TcpListener对象
groupEP = new IPEndPoint(IPAddress.Any, 5270);
pclient = new ArrayList();
while (listenerRun)//开始监听
{
pclient.Add(groupEP);
Byte[] stream = new Byte[80];
stream = tcpl.Receive(ref groupEP);
this.textBox1.AppendText(groupEP.ToString() + System.Text.Encoding.UTF8.GetString(stream));
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
}
}
public void Stop()
{
try
{
tcpl.Close();
th.Abort();//终止线程
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
this.button1.Enabled = false;
this.button2.Enabled = true;
th = new Thread(new ThreadStart(Listen));//新建一个用于监听的线程
th.Start();//打开新线程
}
private void button2_Click(object sender, EventArgs e)
{
this.button2.Enabled = false;
this.button1.Enabled = true;
Stop();
}
private void button3_Click(object sender, EventArgs e)
{
try
{
int index = int.Parse(this.textBox3.Text.Trim());
byte[] bytesMsg = Encoding.Default.GetBytes(this.textBox2.Text.Trim());
IPEndPoint sc = (IPEndPoint)pclient[index];
tcpl.Send(bytesMsg, bytesMsg.Length, sc);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
相关文章推荐
- UDP协议下内网与公网IP进行发送消息,一对多.且选择不同的客户端发送消息
- UDP协议下内网与公网IP进行发送消息
- UDP协议发送和接收消息案例详解
- QUdpSocket简单使用Demo(局域网内发送给所有客户端消息与接收)
- Python UDP协议,冒充飞Q发送消息
- python:使用udp协议发送飞秋消息
- eMule协议规范 附录 A - 消息编码 客户端服务器UDP消息
- java使用UDP协议进行服务器客户端通信
- UDP客户端实现在不同端口上发送和接收数据
- Storm框架:如何根据业务条件选择不同的bolt进行下发消息
- UDP实现内网到网的点对点发送消息与转发消息
- UDP聊天代码发送消息客户端代码
- 使用udp协议给飞Q发送消息
- UDP聊天代码发送消息客户端代码
- Socket编程 消息传送 UDP协议(窗口实现) 客户端
- UDP实现内网到网的点对点发送消息与转发消息
- UDP聊天代码发送消息客户端代码
- 内网客户端使用UDP接收外网消息
- QT中用udp客户端发送消息,丢失数据的情况以及处理!
- 如何使用UDP协议给飞秋发送消息