interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,ComCtrls,scktcomp;type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    server:Tserversocket;
    client:Tclientsocket;
    procedure Serverclientconnect(sender:Tobject;socket:Tcustomwinsocket);
    procedure ClientRead(sender:Tobject;socket:Tcustomwinsocket);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure Tform1.Serverclientconnect(sender:Tobject;socket:Tcustomwinsocket);
begin
  showmessage('101');
  socket.SendText('hello');
end;procedure Tform1.ClientRead(sender:Tobject;socket:Tcustomwinsocket);
begin
  showmessage(socket.ReceiveText);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
  server.Active:=true;
  showmessage('开');
end;procedure TForm1.Button2Click(Sender: TObject);
begin
  if edit1.Text='' then exit;
  client.address:=edit1.text;
  client.Active:=true;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
  server:=Tserversocket.Create(self);
  client:=Tclientsocket.Create(self);
  with server do
  begin
    serverType:=stNonblocking;
    port:=6069;
  end;
  with client do
  begin
    clienttype:=ctNonblocking;
    port:=6069;
  end;
end;end.用同一个程序进行测试,无论我怎么修改socket的servertype,clienttype都不能接收数据,在另一个程序中甚至连建立连接的showmessage都没出现。
我尝试过用serverGetThread进行连接,也不行。连重构TserverClientThread的线程方法都不停报错报warning。
上面这个例子是我抄书的,也不通过。
谁能解释下。

解决方案 »

  1.   

    我发的这代码无错,编译通过,但运行时没接收到信息.
    我用Tserverclientthread类时,重构create时说不能重构静态函数.clientexecute这里说基类没有相关的可继承的东西(我把他放在protected里).
    我没用Tserverclientthread本身,我自己写的派生子类,用于处理一些额外的问题.我自己添加了私有几个变量,竟显示显示never used.但我已经在接口区uses里添加了引用了(连Tform1都报错,我早uses了unit1了).
      

  2.   

    Server和clent使用同一个port,必须使用不同的,因为你在同一台机器上测试。即使在不同的机器上,服务器端和客户端为了避免冲突,均使用不同的端口。
    地址输入必须为“127.0.0.1“本地地址
      

  3.   

    你的Tserversocket,Tclientsocket都在同一个程序中.
    正常的应该是服务器中用server,客户端用client吧.
      

  4.   

    wisdosoft你搞没搞过socket?客户端的port指的是服务端的端口啊,不指定服务端的端口用什么连接?服务端口是多少,client的port就用多少啊.而且我也进行过2个不同程序进行连接了,也不行.我也没听说过不能自己连接自己的原则.
      

  5.   

    哈!低级错误!以前总使用TTcpServer和TTcpClient,使用多了remoteport和localport,所以对你的程序理解有误。认为都是socket的localport.不过,以后说话可要客气一点!山外又山。
    你动态建立连接后没有触发事件。
    procedure   TForm1.FormCreate(Sender:   TObject); 
    begin 
        server:=Tserversocket.Create(self); 
        client:=Tclientsocket.Create(self); 
        with   server   do 
        begin 
            serverType:=stNonblocking; 
            port:=6069;
            onClientConnect := serverClientConnect;  
        end; 
        with   client   do 
        begin 
            clienttype:=ctNonblocking; 
            port:=6069; 
            OnClientRead := Clientread;
        end; 
    end;