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 ...
随机推荐
- ASP.NET之AdRotator实现淘宝浏览页面的商品随机推荐功能
如今随便上个网都能够看到淘宝.京东等各大电商平台的双十一购物狂欢宣传,从2009年開始淘宝愣是把11.11这一天打造成了全民购物狂欢节.阿里巴巴的上市更是激发了阿里人的斗志,据说他们今年的目标是100 ...
- poj 3013 Big Christmas Tree (dij+优先级队列优化 求最短)
模板 意甲冠军:给你一个图,1始终根,每一方都有单价值,每个点都有权重新. 每个边缘的价格值 = sum(后继结点重)*单价方值. 最低价格要求树值,它构成了一棵树n-1条边的最小价值. 算法: 1. ...
- 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异常, 解决方法 ...
- Hibernate在关于一对多,多对一双向关联映射
[Hibernate]之关于一对多,多对一双向关联映射 因为一对多.和多对一的双向关联映射基本上一样,所以这里就一起写下来! Annotations配置 @Entity @Table(name=&qu ...
- JAVA缓存技术之EhCache(转)
最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/ar ...
- Net 项目构建基于Jenkins + Github + Mono 的持续集成环境
Net 项目构建基于Jenkins + Github + Mono 的持续集成环境 阅读目录 1 安装 2 配置 3 测试 在Redhat enterprise 6.5 的服务器上,为在gutub 上 ...
- Codeforces Round #243 (Div. 2) Problem B - Sereja and Mirroring 解读
http://codeforces.com/contest/426/problem/B 对称标题的意思大概是.应当指出的,当线数为奇数时,答案是线路本身的数 #include<iostream& ...
- 采用Flume实时采集和处理数据
它已成功安装Flume在...的基础上.本文将总结使用Flume实时采集和处理数据,详细过程,如下面: 第一步,在$FLUME_HOME/conf文件夹下,编写Flume的配置文件,命名为flume_ ...
- Cocos2d-x3.0 RenderTexture(一) 保存
.h #include "cocos2d.h" #include "cocos-ext.h" #include "ui/CocosGUI.h" ...
- Ubuntu 中查看内核版本和系统版本的三个命令
一.查看内核版本:cat /proc/version 二.查看内核版本:uname -a 三.查看系统版本:lsb_release -a 四.查看发行版类型:cat /etc/issue