在C#中实现Socket端口复用

原创 2007年10月12日 10:40:00
一、什么是端口复用:

  因为在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 localEP 
= new IPEndPoint(IPAddress.Any, 20000);
        socket1 
= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        socket1.Bind(localEP);

再建立第二个Socket:

        Socket socket2
        IPEndPoint localEP 
= new IPEndPoint(IPAddress.Any, 20000);
        socket2
= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 
true);
       
//请注意这一句。ReuseAddress选项设置为True将允许将套接字绑定到已在使用中的地址。 
        socket2.Bind(localEP);

这样Socket1和Socket2便绑定在同一个端口上了。

例程源代码我上传到我的资源里面大家可以到http://www.cnblogs.com/Files/wzd24/28135640620.rar去下载。

 

SOCKET端口复用

在WINDOWS的SOCKET服务器应用的编程中,如下的语句或许比比都是:  s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); saddr.sin_family...
  • menghaibin2009
  • menghaibin2009
  • 2013年10月09日 16:47
  • 1194

(VC代码) 端口复用的思路与实现

端口复用在黑客后门程序中十分重要,当你侵入一台服务器时,这台服务器如果安装了防火墙,则使用一般的后门程序时,后门程序使用的是防火墙禁止的端口,则可以通过复用防火墙允许的端口来与后门程序进行数据交流,比...
  • minaiyi
  • minaiyi
  • 2014年05月08日 18:54
  • 1558

关于linux socket 编程 端口复用的理解

端口复用的理解在linux socket网络编程中,大规模并发TCP或UDP连接时,经常会用到端口复用: int opt = 1; if(setsockopt(sockfd, SOL_SOCKET,...
  • libinbin_1014
  • libinbin_1014
  • 2016年03月06日 13:26
  • 2891

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

在《绑定( bind )端口需要注意的问题》提到:一个网络应用程序只能绑定一个端口( 一个套接字只能绑定一个端口 )。 实际上,默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端口( 占用了...
  • tennysonsky
  • tennysonsky
  • 2015年03月04日 18:07
  • 11884

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

Socket端口复用 先说为什么要使用socket端口复用?如果你遇到过这样的问题:server程序重启之后,无法连接,需要过一段时间才能连接上?  1.一个监听(listen)serve...
  • NK_test
  • NK_test
  • 2015年10月05日 10:17
  • 2545

[摘抄-Socket-学习中]TCP&UDP通信中socket端口的复用

网络编程socket深入探索中,前期已经了解过基础的网络编程,但太过浅显,只知道基础的几次握手和数据传输而已,但其中的明细和规则不是特别了解,故进一步探索,继续记录归档。...
  • junk1357
  • junk1357
  • 2017年04月27日 14:52
  • 262

在C#中实现Socket端口复用

http://www.cnblogs.com/wzd24/archive/2007/05/22/755016.html 在C#中实现Socket端口复用 一、什么是端口复用...
  • mosangbike
  • mosangbike
  • 2017年03月28日 17:02
  • 432

在C#中实现Socket端口复用

一、什么是端口复用:   因为在winsock的实现中,对于服务器的绑定是可以多重绑定的,在确定多重绑定使用谁的时候,根据一条原则是谁的指定最明确则将包递交给谁,而且没有权限之分。这种多重绑定便...
  • Plutus_Lee
  • Plutus_Lee
  • 2013年01月06日 12:21
  • 543

在C#中实现Socket端口复用

在C#中实现Socket端口复用 2014-10-13 15:52:47 分类: C#/.net 一、什么是端口复用:   因为在winsock的实现中,...
  • mosangbike
  • mosangbike
  • 2017年02月15日 15:48
  • 250

在C#中实现Socket端口复用

转自:http://www.cnblogs.com/wzd24/archive/2007/05/22/755016.html 一、什么是端口复用:   因为在winsock的实现中,对于服务器...
  • u012252959
  • u012252959
  • 2016年01月06日 16:00
  • 259
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在C#中实现Socket端口复用
举报原因:
原因补充:

(最多只允许输入30个字)