TODO:Golang语言TCP/UDP协议重用地址端口

这是一个简单的包来解决重用地址的问题。 go net包(据我所知)不允许设置套接字选项。 这在尝试进行TCP NAT时尤其成问题,其需要在同一TCP端口上进行侦听和拨号的过程。 这个包使我有可能实现这个功能。 这是一个非常小众的用例,但也许这个软件包可以随着时间的推移变得更普遍。

此包允许从同一TCP端口侦听和拨号;不能使用同一UDP端口监听,但可以监听同一UDP端口。 这意味着设置了以下sockopts:

syscall.SO_REUSEADDR

syscall.SO_REUSEPORT

例子:

// listen on the same port.

l1, _ := reuse.Listen(“tcp”, “127.0.0.1:1234”)

l2, _ := reuse.Listen(“tcp”, “127.0.0.1:1234”)

// dial from the same port.

l1, _ := reuse.Listen(“tcp”, “127.0.0.1:1234”)

l2, _ := reuse.Listen(“tcp”, “127.0.0.1:1235”)

c1, _ := reuse.Dial(“tcp”, “127.0.0.1:1234”, “127.0.0.1:1235”)

c2, _ := reuse.Dial(“tcp”, “127.0.0.1:1234”, “127.0.0.1:1235”)

以下是完整TCP拨号例子,在Ubuntu 14.04 Sever测试通过

Server代码:

Client代码:

如果你有需要重用TCP/UDP的地址和端口的场景,可以尝试一下这个包,希望可以让你达到事半功倍的效果。


wxgzh:ludong86

TODO:Golang语言TCP/UDP协议重用地址端口的更多相关文章

  1. QQ--基于TCP/UDP协议的通讯原理

    QQ是一个基于TCP/UDP协议的通讯软件  发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服 务器,只不过不是常用的那些,那个服务器是腾讯自行开发的!   一 ...

  2. java 通过TCP\UDP 协议实现多人聊天,点对点,文件传送-----分服务器端和客户端

    java 通过TCP\UDP 协议实现多人聊天,点对点,文件传送-----分服务器端和客户端 启动界面如下图: 首先启动服务器: 客户端登陆,登陆成功后为: 默认发送是全部用户,是多人发送. 当在边列 ...

  3. 网络编程—网络基础概览、socket,TCP/UDP协议

    网络基础概览 socket概览 socket模块—TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网 ...

  4. TCP/IP 协议、地址

    (一)TCP/IP 协议是端与端之间通信的基础,计算机网络,分组报文,协议是将信息正确传递的组成. 计算机网络: 由多个客户端,中间路由组成的网络体系,每个节点都一个ip进行唯一识别.路由是作为一个转 ...

  5. TCP/UDP协议简要梳理

    TCP/UDP协议简要梳理 TCP TCP,Transmission Control Protocol,传输控制协议是一种面向连接的.可靠的.基于字节流的传输层通信协议.在因特网协议族中,TCP所在的 ...

  6. Shell 脚本实现TCP/UDP协议通讯

    Shell 脚本实现TCP/UDP协议通讯 http://www.cnblogs.com/occult/archive/2012/12/25/2832183.html  

  7. Samba 服务使用的端口和协议(是一组TCP UDP协议的组合,主要使用CIFS协议,有一个Java例子)

    Samba服务所使用的端口和协议: 1)Port 137 (UDP) - NetBIOS 名字服务 : nmbd 2)Port 138 (UDP) - NetBIOS 数据报服务 3)Port 139 ...

  8. NetworkComms框架介绍 完美支持TCP/UDP协议

    NetworkComms网络通信框架序言 英文文章地址 :http://www.networkcomms.net/tcp-udp-connections/ NetworkComs.Net无缝的支持TC ...

  9. 计算机网络中的TCP/UDP协议到底是怎么回事(一)

    TCP/IP五层网络结构模型 物理层:物理层建立在物理通信介质的基础上,作为系统和通信介质的接口,用来实现数据链路实体间透明的比特 (bit) 流传输.只有该层为真实物理通信,其它各层为虚拟通信 数据 ...

随机推荐

  1. CuPlayer

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> <met ...

  2. 深入理解javascript函数系列第四篇——ES6函数扩展

    × 目录 [1]参数默认值 [2]rest参数 [3]扩展运算符[4]箭头函数 前面的话 ES6标准关于函数扩展部分,主要涉及以下四个方面:参数默认值.rest参数.扩展运算符和箭头函数 参数默认值 ...

  3. ClamAV安装使用及API例子

    ClamAV是一款由Sourcefire组织开发的开源杀毒引擎,Sourcefire同时也是Snort入侵检测引擎的所有者.ClamAV提供了一种更为快速灵活的框架用以检测恶意代码和软件产品.可以作为 ...

  4. 三星的中低端机使用AsyncTask的问题

    三星的中低端机上在子线程中使用AsyncTask会报 01-15 23:46:20.165: W/dalvikvm(7259): Exception Ljava/lang/RuntimeExcepti ...

  5. 已经被cocos2dx给折腾的想要放弃它,专注Unity3D的怀抱了!

    一直使用cocos2dx编写自己的2D小游戏,不得不说,编写个人的超级小规模的游戏,使用cocos2dx有一定的优势,首先门槛很低,编写2D游戏用起来也算顺手,可惜一直没有一个优秀的UI编辑器,好不容 ...

  6. 亲测PHpnow 安装环境

    出现问题1: "C:\Windows\system32\7z.exe"' 不是 或批处理文件. 找不到 C:\Windows\system32\7z.exe------------ ...

  7. Android之用PopupWindow实现弹出listview形式菜单

    Android 4.0之前的菜单使用非常广泛,但是在android4.0之后,很少使用先前的菜单样式了.那如何实现下图的样式了? 我们简单模拟一下. (1)屏蔽系统弹出的菜单: 1.首先创建至少一个系 ...

  8. KindEditor - 富文本编辑器 - 使用+上传图片

    代码高亮:http://www.cnblogs.com/KTblog/p/5205214.html 效果: 项目结构: Extend:存放各种扩展 BlogAction.class.php:博文模块 ...

  9. Bootstrap快速入门

    Bootstrap有两个重点,一个是概念的理解,理解bootstrap是如何通过div来代替过去的table布局的:一个是常用结构的熟悉,做到需要的组件马上就能找到,小修修改改可用就行.其最帅的一点就 ...

  10. IT连创业系列:年终回顾录!

    一年不过一转眼,一光阴的青春又逝去了! 还有不到几天,就要进入新年快乐的祝福包围圈了. 在这归家之际,留文一篇,为这忙碌的一年创业留点回忆! IT连创业这一年走来: 大大小小的深坑,小小大大的困难,一 ...