端口重用的问题(100分)

  • 主题发起人 主题发起人 gohoo
  • 开始时间 开始时间
G

gohoo

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
s,c1:Tsocket;
aWSAData:TWSAData;
sa:sockaddr_in;
t1,t2:dword;
flag:pchar;
begin
flag:=pchar('1');
t1:=gettickcount;
try
if WSAstartup(MAKEWORD(2,2),aWSAData)<>0 then exit;
s:=socket(2,1,6);

if s=INVALID_SOCKET then exit;
sa.sin_family:=pf_inet;
sa.sin_port:=htons(80);//要重用80口的
sa.sin_addr.S_addr:=INADDR_any; //inet_addr(&quot;127.0.0.1&quot;);

if setsockopt(s,SOL_SOCKET,SO_REUSEADDR,flag,sizeof(flag))=-1
then begin
getlasterror;
exit;
end;

if bind(s,@sa,sizeOF(sa))=socket_error then
begin
closesocket(s);
exit;
end;
self.Caption:='开始监视80端口';
listen(s,5);

while (1) do
begin
memo1.Lines.Add('监听中....');
t2:=gettickcount;
if t2-t1>10000 then exit;
end;
finally
WSACleanup;
end;
end;
//以上是在80端口监听的程序,但是在setsockopt那行过不去,
//该怎么办?那位大虾知道啊,帮个忙??
 
flag := 1;
if SetSockopt(SvrSocket,SOL_SOCKET,SO_REUSEADDR,pchar(@flag),sizeof(flag)) = SOCKET_ERROR then
begin
showmessage('SO_REUSEADDR set error.');
end;
 
不行啊,不能绑定80端口。。。
怎么办???
 
去掉flag:=pchar('1');
 
我用boolean 替换了flag,但是还是不行,挂不上去,监听不了
 
现在具体情况是这样的:
我写了个WEB service 在82端口获取request并提供服务;
然后用这个程序监视他,
发现在监视的过程中,测试机网页打开很慢不能访问
我的web service
当我的监视程序停止的时候,就正常了,
现在我该怎么办才能监视82端口,又不影响正常的操作?
 
后退
顶部