UDP协议下内网与公网IP进行发送消息,一对多.且选择不同的客户端发送消息
客户端代码:
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);
}
}
}
}
转载于:https://www.cnblogs.com/top5/archive/2010/03/29/1699479.html
UDP协议下内网与公网IP进行发送消息,一对多.且选择不同的客户端发送消息相关推荐
- frp内网穿透-公网IP低成本使用高性能kali
frp内网穿透-公网IP低成本使用高性能kali 1.frp Github项目地址:https://github.com/fatedier/frp 找到最新的releases下载,系统版本自行确认. ...
- nat123端口映射: 外网通过ssh访问内网非公网ip的服务器
问题描述 LINUX部署在内网环境,没有公网IP,在内网可以上外网.如何实现在外网SSH访问内网LINUX主机? 解决方法: 使用nat123端口映射,一步映射即可将内网LINUX地址映射到外网,实现 ...
- python脚本获取内网,公网ip
2019独角兽企业重金招聘Python工程师标准>>> 获取内网ip: get_inner_ipaddr.py #!/usr/bin/env python import socket ...
- Cisco NAT --- 从内网用公网IP地址访问内网服务器
好吧,我承认这个标题挺难读 , 从一会儿内网一会儿公网一会儿又内网的. 但是这确实一个很实在的问题.如果你用的是ASA或其他防火墙,可以直接 跳过,这东西对防火墙来说实现起来太容易.我们的目标还是思科 ...
- 内网穿透妙用——内网转公网nat123
公网下访问私有云盘--NAT123免费圆梦 根据前两期发布的关于个人网盘搭建的博客(个人网盘配置--以Cloudreve为例),博主进行了进一步的更新维护,由于初始配置版本是基于局域网组建的,在小型办 ...
- RTSP协议网络摄像头如何实现内网到公网的无插件直播,同时支持微信扫码直播观看?
目前,微信用户已达12亿人,自媒体时代扑面而来,微信视频扫码直播颠覆传统,成为在线视频直播发展的方向.当微信成为人们日常的习惯应用,围绕微信形成的在线视频直播生态企业也在悄然崛起. 最近在项目交流过程 ...
- 什么是内网、公网和NAT?
一.内网.公网和NAT的定义 内网也叫局域网,从范围上来讲内网就是小部分的网络,一般指的是特定环境下组成网络,比如某一个家庭多台计算机互联成的网络,也可以学校和公司的大型局域网,内网的IP一般都是19 ...
- 【Minecraft开服教学】使用 MCSM 面板一键搭建我的世界服务器 并使用内网穿透公网远程联机
文章目录 前言 1.Mcsmanager安装 2.创建Minecraft服务器 3.本地测试联机 4. 内网穿透 4.1 安装cpolar内网穿透 4.2 创建隧道映射内网端口 5.远程联机测试 6. ...
- 什么是内网、公网和NAT?读懂这一篇就够!
我们做弱电监控系统的时候,都避免不了要跟IP地址打交道,比如摄像头.NVR.服务器等这些设备安装好之后,就需要给它们配上IP,那这个IP地址你了解嘛?今天我们就一起来聊聊什么是内网.公网和NAT地址转 ...
最新文章
- Dijkstra算法--有向图的源点到其他顶点的最短路径(连接矩阵、邻接矩阵两种方式)
- mysql图标_MySQL 支持 emoji 图标存储
- php针对中文的字符串函数,php截取中文字符串函数实例_php技巧
- java对象创建的流程到底是什么样子的?new一个对象是真的直接放在堆里吗?其实大有学问!
- .net上传,一个选择直接上传(ashx)和byteArray上传
- ActiveMQ持久化到mysql
- 阿里云mysql 日志_mysql日志-阿里云开发者社区
- 4. MyBatis几个可以优化的地方
- 5930. 两栋颜色不同且距离最远的房子
- 将结构体数据存储到一段字符串string中
- mosquitto鉴权插件的开发与说明(一)
- port security violation protect retrict shutdown 之具体解释
- [河南省ACM省赛-第四届] 表达式求值(nyoj 305)
- python绘制子图去掉x轴坐标值_python – 关闭图形的所有子图的轴
- 单行溢出隐藏没生效_至今没搞懂,为什么这个缸这么火?
- 手机锁屏后微信收款语音不播报?-by:nixs
- 通信原理与MATLAB(三):SSB的调制解调
- 从攻击事件分析加密攻击类型、工具、防范方法和未来预测
- java实现3D动态效果_js实现3D粒子酷炫动态旋转特效
- Matlab求齐次方程的解