讨论一下深度技术: 80端口绑定技术 ( 积分: 20 )

  • 主题发起人 主题发起人 dazzling
  • 开始时间 开始时间
D

dazzling

Unregistered / Unconfirmed
GUEST, unregistred user!
我的计算机已开启了IIS,因此80端口无法再使用.

但是我现在必须要写个SERVER程序接受80端口的连接和数据访问, 怎么办?
 
很简单的问题把iis停掉
 
这个是不是Http隧道技术啊
 
楼主的需求用端口复用可以实现,转贴一个文章:

端口复用听起来很深奥的技术,其实很简单,简单得只需要一个函数就可以实现:
setsockopt( SOCKET s, int level, int optname, const char FAR *optval, int optlen );
参数: s Socket 的识别码,level选项设定的 level ,optname 选项名称 ,optval 选项的设定值 ,optlen 选项设定值的长度。
我只说一个参数,就是选项名称的其中一个选项SO_REUSEADDR,稍微会一点英语的和有一点计算机基础知识的都知道,这个选项后面的意思就是“重复使用地址”
我这里把实现端口复用的代码给出来,并给新手朋友们解释一下:
var
sobinyshuai : bool;
myIP : string;
PORT : integer;
ServerSocket : TSocket;
SockAddrIn: TSockAddrIn;
WSAData: TWSAData;
begin
myIP:=’123.123.123.123’;{你自己的IP,为什么要这个,下面会说}
sobinyshuai:=TRUE; {这句话的意思是,sobiny帅,赋值是肯定的回答。呵呵,开个玩笑。}
WSAStartUp(MakeWord(1, 1), WSAData);
ServerSocket := WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, nil, 0, 0); {建造一个TCP的socket。}
setsockopt(ServerSocket, SOL_SOCKET, SO_REUSEADDR, @sobinyshuai, sizeof(sobinyshuai));
{设定socket的状态,还是关键的这一句SO_REUSEADDR,允许端口重用}
SockAddrIn.sin_family := AF_INET; {设置这个连接的,我都还不晓得有另外的选项没,不过好象一直用这个。}
SockAddrIn.sin_addr.s_addr:=inet_addr(myIP); {设置这个连接的IP,这里可以是INADDR_ANY这个选项,不过要是是INADDR_ANY的话,所有的外部的连接都会是这个,不过要是你复用的80端口,设置INADDR_ANY的话,后果可想而知。当然你程序要是辨别数据包当然没问题}
SockAddrIn.sin_port := htons(Port); {设置这个连接的端口}
Bind(ServerSocket, SockAddrIn, SizeOf(SockAddrIn));{设置ServerSocket的属性吧,应该这样理解}
Listen(ServerSocket, 1); {设置监听,等待连接。在Accept前只接受一个连接}
……
end;
 
端口复用!高!学习中!

不过楼主说开了iis就不能用80端口?你不会把你的iis配置一下用别的端口啊?晕/
 
我要的是在TServerSocket下实现的方法,有谁试过?
 
后退
顶部