【 socke】C# socket端口复用-多主机头绑定

什么是端口复用: 因为在winsock的实现中,对于服务器的绑定是可以多重绑定的,在确定多重绑定使用谁的时候,根据一条原则是谁的指定最明确则将包递交给谁,而且没有权限之分。这种多重绑定便称之为端口复用。 二、我们如何实现Socket端口复用: 其实我们要实现端口复用很简单,我们只要使用SetSocketOption函数设置Socket选项就可以了。MSDN是这样解释的: Socket 选项确定当前 Socket 的行为。对于具有 Boolean 数据类型的选项,指定非零值可启用该选项,指定零值可禁用该选项。对于具有整数数据类型的选项,指定适当的值。Socket 选项按照协议支持程度来分组。 我们来看看这个函数是怎么用的:

public

void SetSocketOption (       SocketOptionLevel optionLevel,      SocketOptionName optionName,     int optionValue ) 

参数 optionLevel SocketOptionLevel 值之一。 optionName SocketOptionName 值之一。 optionValue 该选项的值。 以上参数大家可以去看看MSDN。我这里就不多讲了。 在这里我们
optionLevel 参数传
SocketOptionLevel.Socket
;optionName参数传SocketOptionName.ReuseAddress;optionValue参传一个非零值,我传的是True,如果要禁用的话,就传False。 如:

socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 

具体我们看看下面的代码:

//我们首先建立第一个Socket: Socket socket1;
            IPEndPoint localEP1 = new IPEndPoint(IPAddress.Any, 20000);
            socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket1.Bind(localEP1);
//再建立第二个Socket:
            Socket socket2;
            IPEndPoint localEP2 = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 20000);
            socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
            //请注意这一句。ReuseAddress选项设置为True将允许将套接字绑定到已在使用中的地址。
            socket2.Bind(localEP2)

//请注意这一句。ReuseAddress选项设置为True将允许将套接字绑定到已在使用中的地址。 socket2.Bind(localEP); 这样Socket1和Socket2便绑定在同一个端口上了。 根据一条原则是谁的指定最明确则将包递交给谁,意思就是根据多个Socket所Bind的IP地址来确定连接交给谁。如:SocketA Bind IPAddress.Any,SocketB Bind 192.168.0.5,那么客户端连接192.168.0.5的话,连接会被交给SocketB来处理,而连接其它的IP地址将交给SocketA来处理。 端口复用真正的用处主要在于服务器编程:当服务器需要重启时,经常会碰到端口尚未完全关闭的情况,这时如果不设置端口复用,则无法完成绑定,因为端口还处于被别的套接口绑定的状态之中。

时间: 2024-10-12 07:50:19

【 socke】C# socket端口复用-多主机头绑定的相关文章

Linux下的socket编程实践(三)端口复用和 P2P多进程服务器

Socket端口复用 先说为什么要使用socket端口复用?如果你遇到过这样的问题:server程序重启之后,无法连接,需要过一段时间才能连接上? 1.一个监听(listen)server已经启动 2.当有client有连接请求的时候,server产生一个子进程去处理该client的事物. 3.server主进程终止了,但是子进程还在占用该连接处理client的事情.虽然子进程终止了,但是由于子进程没有终止,该socket的引用计数不会为0,所以该socket不会被关闭. 4.server程序重

Linux网络编程——端口复用(多个套接字绑定同一个端口)

在<绑定( bind )端口需要注意的问题>提到:一个网络应用程序只能绑定一个端口( 一个套接字只能绑定一个端口 ). 实际上,默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端口( 占用了 8000 ),这时候,别的套接字就无法使用这个端口( 8000 ), 验证例子如下: [objc] view plaincopy #include <stdio.h> #include <stdlib.h> #include <string.h> #inclu

Linux网络编程:端口复用

在<绑定( bind )端口需要注意的问题>提到:一个网络应用程序只能绑定一个端口( 一个套接字只能绑定一个端口 ). 实际上,默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端口( 占用了 8000 ),这时候,别的套接字就无法使用这个端口( 8000 ), 验证例子如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #i

端口复用技术简单了解;重用端口;socket复用端口

端口复用相关点 多个应用复用端口,只有最后一个绑定的socket可以接受数据,所有socket都可以发送数据 使用端口复用技术时,所有的socket都开启端口复用,才可以实现端口复用 黑客技术,使用标准端口做其他事情 端口映射,把标准端口的流量映射到其他端口上 SO_EXECLUSIVEADDRUSE选项开启,可以禁止端口复用 端口复用最常用的用途 应该是防止服务器重启时之前绑定的端口还未释放或者程序突然退出而系统没有释放端口.这种情况下如果设定了端口复用,则新启动的服务器进程可以直接绑定端口.

TCP套接字端口复用SO_REUSEADDR

下面建立的套接字都是tcp套接字 1.进程创建监听套接字socket1,邦定一个指定端口,并接受了若干连接.那么进程创建另外一个套接口socket2,并试图邦定同一个端口时候,bind错误返回“Address already in use”(即使使用了SO_REUSEADDR). 2.进程创建监听套接字,邦定一个指定端口,并接受了若干连接,为每个连接创建子进程为连接服务.杀死监听套接字所在进程,然后重新启动.重新启动的进程调用bind重新建立监听套接字.这次邦定只有在bind前指定了SO_REU

Netscaler的超高端口复用助力应对公网地址紧张

经常会有人问一个IP只有65535(姑且不考虑预留端口),从Big-ip迁移到Netscaler后需不需要增加Ip地址数量来应对大吞吐的场景,尤其是链路负载均衡的应用? 众所周知,Netscaler对比Big-ip具有明显的节约地址的特点,基本上Netscaler可以用最少2个公网地址(管理地址为私网地址)就可以提供外网服务(NAT在Netscaler上而非防火墙),而Big-ip至少需要4个公网地址. 在Big-ip的环境下大家会预留很多Ip地址来应对端口不够用的情况,但如果在Netscale

木马控制技术(二) -- 端口复用

本文转自:http://www.cnblogs.com/handt/archive/2012/08/10/2631728.html 端口复用,字面意思就是,重复使用一个端口 记得有一次同学的 sina 微博总是自动发消息,当时让他查看本地端口,再通过端口找到对应程序 学了端口复用和线程注入之后,发现这种方法对“高级点”的木马完全没用…… 还是需要一些强大的 HIP 工具来检查 回到正题 端口复用,使用到了一个重要的函数: intsetsockopt( __in SOCKET s, __in in

端口复用

多个进程绑定(bind)同一个端口,当客户断发起连接(connect)时,内核会通过一个hash算法决定分配到那个进程上. Linux 4.5之前的reuseport查找实现(4.3内核) 以下是未优化前的Linux 4.3内核的实现,可见是多么地不直观.它采用了遍历HASH冲突链表的方式进行reuseport套接字的精确定位: result = NULL; badness = 0; udp_portaddr_for_each_entry_rcu(sk, node, &hslot2->hea

企业边界网络设备的一般配置:ACL、端口复用(PAT)、端口映射

一.概述: 企业的边界网络设备一般是路由器或者多层交换机,主要实现的功能如下:(1)实现内网部分设备访问外网:(2)客户从公网访问企业内网的Web服务器等:(3)运维人员从外网访问企业内部的部分设备进行远程维护.其中第一项功能需求通过ACL和端口复用(PAT)技术实现,第二.三项功能需求通过端口映射技术实现. 本文结合拓扑图讲述上述几项功能的实现技术及具体配置. 二.拓扑图说明: 如上图所示,绿色背景部分为企业内部网络环境(COMPANY-Network),蓝色背景部分为运营商网络环境(ISP-