Socket 学习(三).2 udp 穿透 服务端 与 客户端 通讯
之前演示的 是 局域网通讯,也可以用作服务器之间的通讯,不能穿透。 想要穿透就要用 udp 了, 后续再讲解 udp 打洞 .
客户端:
using System;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading; namespace WinFormP2pClient
{
public partial class Form1 : Form
{
public Form1()
{
CheckForIllegalCrossThreadCalls = false;// 禁止线程检查
InitializeComponent();
} private UdpClient _udpClient;
private IPEndPoint _serverIpEndPoint;
private Thread _threadReceive;
// 线程 接收
private void Button1Click(object sender, EventArgs e)
{
_udpClient = new UdpClient();//不指定自己的端口
_serverIpEndPoint = new IPEndPoint(IPAddress.Parse(textBoxIP.Text), );//服务端IP、端口 本地测试就用127.0.0.1 就好
byte[] buffer = Encoding.UTF8.GetBytes("你好");
_udpClient.Send(buffer, buffer.Length, _serverIpEndPoint);//与服务端牵手 _threadReceive = new Thread(Receive);
_threadReceive.Start(); } private void Receive()
{
try
{
while (true)
{
Byte[] buffer = _udpClient.Receive(ref _serverIpEndPoint);
textBox1.Text = Encoding.UTF8.GetString(buffer) + _serverIpEndPoint; }
}
catch
{
_threadReceive.Abort();
} } private void Form1FormClosing(object sender, FormClosingEventArgs e)
{
_udpClient.Close();
}
}
}
服务端:
using System;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading; namespace WinFormP2pServer
{
public partial class Form1 : Form
{
public Form1()
{
CheckForIllegalCrossThreadCalls = false;
InitializeComponent();
} private readonly UdpClient _udpClientServer = new UdpClient();//只允许别人用这个端口号连接我 , udp 服务端
private IPEndPoint _clientIpEndPoint = new IPEndPoint(IPAddress.Any, );// 允许任何人联系我 , 对方的连接 对象
private Thread _threadReceive;
private void Form1Load(object sender, EventArgs e)
{
_threadReceive = new Thread(Receive);
_threadReceive.Start(); } private void Receive()
{
try
{
while (true)
{
Byte[] buffer = _udpClientServer.Receive(ref _clientIpEndPoint);
textBox1.Text = Encoding.UTF8.GetString(buffer) + _clientIpEndPoint; }
}
catch
{
_threadReceive.Abort();
} } private void Form1FormClosing(object sender, FormClosingEventArgs e)
{
_udpClientServer.Close();
_threadReceive.Abort();
} private void Button1Click(object sender, EventArgs e)
{
try
{
var temp = Encoding.UTF8.GetBytes("Hello");
_udpClientServer.Send(temp, temp.Length, _clientIpEndPoint);
}
catch
{ } }
}
}
效果图:

这里其实已经实现穿透了。。。
Socket 学习(三).2 udp 穿透 服务端 与 客户端 通讯的更多相关文章
- Netty 学习(一):服务端启动 & 客户端启动
Netty 学习(一):服务端启动 & 客户端启动 作者: Grey 原文地址: 博客园:Netty 学习(一):服务端启动 & 客户端启动 CSDN:Netty 学习(一):服务端启 ...
- Netty 学习(二):服务端与客户端通信
Netty 学习(二):服务端与客户端通信 作者: Grey 原文地址: 博客园:Netty 学习(二):服务端与客户端通信 CSDN:Netty 学习(二):服务端与客户端通信 说明 Netty 中 ...
- 基于SignalR的服务端和客户端通讯处理
SignalR是一个.NET Core/.NET Framework的实时通讯的框架,一般应用在ASP.NET上,当然也可以应用在Winform上实现服务端和客户端的消息通讯,本篇随笔主要基于Sign ...
- Unity使用C#实现简单Scoket连接及服务端与客户端通讯
简介: 网络编程是个很有意思的事情,偶然翻出来很久之前刚开始看Socket的时候写的一个实例,贴出来吧 Unity中实现简单的Socket连接,c#中提供了丰富的API,直接上代码. 服务端代码: [ ...
- Python3学习之路~8.3 socket 服务端与客户端
通过8.2的实例1-6,我们可以总结出来,socket的服务端和客户端的一般建立步骤: 服务端 步骤:1创建实例,2绑定,3监听,4阻塞,5发送&接收数据,6关闭. #Author:Zheng ...
- 手写内网穿透服务端客户端(NAT穿透)原理及实现
Hello,I'm Shendi. 这天心血来潮,决定做一个内网穿透的软件. 用过花生壳等软件的就知道内网穿透是个啥,干嘛用的了. 我们如果有服务器(比如tomcat),实际上我们在电脑上开启了服务器 ...
- TCP/IP网络编程之基于UDP的服务端/客户端
理解UDP 在之前学习TCP的过程中,我们还了解了TCP/IP协议栈.在四层TCP/IP模型中,传输层分为TCP和UDP这两种.数据交换过程可以分为通过TCP套接字完成的TCP方式和通过UDP套接字完 ...
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
常量,字段,构造方法 常量 1.什么是常量 常量是值从不变化的符号,在编译之前值就必须确定.编译后,常量值会保存到程序集元数据中.所以,常量必须是编译器识别的基元类型的常量,如:Boolean ...
- 【转】TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
[转]TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP ...
随机推荐
- java.lang.IllegalStateException: ActionBarImpl can only be used with a compatible window decor layou
于Activity调用它们的定义dialog事件ActionBarImpl can only be used with a compatible window decor layout异常, 解决方法 ...
- ASP.NET MVC4实现URL伪静态
1.在Web.config添加节点配置: <system.webServer> <modules runAllManagedModulesForAllRequests="t ...
- WCF搭建
WCF搭建 前言:前面三篇分享了下DDD里面的两个主要特性:聚合和仓储.领域层的搭建基本完成,当然还涉及到领域事件和领域服务的部分,后面再项目搭建的过程中慢慢引入,博主的思路是先将整个架构走通,然后一 ...
- 树莓派的演奏音符3 -- LCD1602显示文章
LCD1602它是低-cost输出装置.它具有体积小.简单的操作.低功耗优势.因此,在一些DIY 用它来输出关于产品的一些信息. 昨日在使用,尽管平局网上资源,但仍存在一些问题,确处理. 一.LCD1 ...
- HTML5分析实战WebSockets基本介绍
HTML5 WebSockets规范定义了API,同意web使用页面WebSockets与远程主机协议的双向交流. 介绍WebSocket接口,并限定了全双工通信信道,通过套接字网络.HTML5 We ...
- java volatile的一个验证反例(转)
网上关于java volatile的资料已经不少了,但搜了好久也没看到谁用代码很好地验证过使不使用volatile的差异.最近自己写了个测试,意外的看到了两者的明显区别,为什么说意外呢,因为根据我的测 ...
- 获得mysql内容,生成xml文件,另外,为了webservice发送
<xyt> <news id> <url></url> <title></title> </news> </x ...
- mysql及powerdesigner的初次使用
原文:mysql及powerdesigner的初次使用 MYSQL的下载与安装: 下载与安装指导教程: http://jingyan.baidu.com/article/597035521d5de28 ...
- asp.net下cookie 的基础使用
cookie作为在B/S开发中经常被使用到的东西,asp.net必然提供了现成的东西给我们使用. 就是这个对象:HttpCookie,当然了,对于asp.net来说,Request和Response中 ...
- JS数据绑定模板artTemplate试用
之前写JS绑定数据曾经用过tmpl库,虽然功能比较强大但是感觉不是很轻量,对于相对简单的数据需求显得有些臃肿.而Ajax返回数据自己拼接html的方式又显得不够高端,因此今天看了一篇介绍artTemp ...