救命啊,网络通讯高手请进! (50分)

  • 主题发起人 blad_pitt
  • 开始时间
B

blad_pitt

Unregistered / Unconfirmed
GUEST, unregistred user!
我用serversocket做了一个根据80端口的onclientconnect事件来侦测对方ip的程序,可是
根本不管用啊。原代码如下:
serversocket1.onclientconnect()
begin
memo1.lines.add(socket.remoteaddress);
socket.close;
end;
button1.onclick
begin
serversocket1.port:=80;
serversocket1.active:=true;
end;
执行时提示winsock error,套接字不能被重复使用,我换成别的端口就可以了,这怎么解决呢?
 
我试过的,可以的呀
 
[?]老兄,咱哥俩可碰上啦,我也正在琢磨这俩控件呢,
我顺便问您一下,直接这样做为什么不行??
serversocket1.port:=80;
serversocket1.active:=true;
 
客户端跟它连接了吗?
 
../Borland/Delphi5/Demos/Internet/Chat
下面有Delphi自带的例子,自己看看吧
 
用做客户端吗?例子好象说是就做这个就行了,可以侦测出上网时连接的网站的ip
to lantian329:
这样做可以的,不过就是上网的时候,程序根本没反应,一个ip也没有显示。
 
>执行时提示winsock error,套接字不能被重复使用
你大概安装了iis之类的软件,他原来已经使用了80端口了吧
 
我是在win2000里做的,执行时会有这个提示,可是我拿到win me里就可以执行了
但是执行后得不到结果,没显示出一个ip
 
关注,学习。
 
你的80端口被别的程序占用了
 
indy有一个专门显示的IP控件,自己查查吧
 
可以重新占领已经使用的端口:
type
TForm2 = class(TForm)
ServerSocket1: TServerSocket;
private
FSocketEvent: TSocketEventEvent;
procedure SocketEvent(Sender: TObject; Socket: TCustomWinSocket;
SocketEvent: TSocketEvent);
end;

procedure TForm2.SocketEvent(Sender: TObject; Socket: TCustomWinSocket;
SocketEvent: TSocketEvent);
var
Reuse: Integer;
begin
if Assigned(FSocketEvent) then
FSocketEvent(Sender, Socket, SocketEvent);
if SocketEvent = seLookUp then
begin
Reuse := 1;
if Socket.SocketHandle <> INVALID_SOCKET then
setsockopt(Socket.SocketHandle, SOL_SOCKET, SO_REUSEADDR,
PChar(@Reuse), SizeOf(Reuse));
end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
ServerSocket1.Port := 80;
FSocketEvent := ServerSocket1.Socket.OnSocketEvent;
ServerSocket1.Socket.OnSocketEvent := SocketEvent;
ServerSocket1.Active := True;
end;
 
你是不是装了IIS或是其它占用80端口的软件了?
 
可是我在win me里用的时候,没有提示端口被占用,可以正常运行,可是就是不显示出ip
地址来。
 
这样吧,谁有做成功的,发e-mail给我,我就把分给他结束帖子了
blad_pitt@sina.com
 
晕了,上面的代码都看不懂,算了,走人
 
我是看懂楼主的意思,套接字是不能重复使用的,除非你设定了一个参数,而且要复制
套接字句炳
 
你连服务器端或是客户端都没有
且你的那段没有客户端和服务器端连接都没有也也不知道怎么连接了!!!!所以要一个服务和一个客户端!!!!
 
我用vb编出来一个客户和服务器互控的服务!!!!!有兴趣的话可以发email给我我发给你看一下!!!
我想deiphl和vb也许差不多!!!!!
 
顶部