我用的是delphi6.0。为了测试socket的使用我分别建了两个project,分别为cli_prj
(client)  & ser_prj(server).
   client中有控件edit1,clientSocket1,button1
   server中有控件edit1,ServerSocket1,
   以上socket的端口为4000,clientSocket1.address=(本地机的IP)
打算设计的处理过程如下:
   点击botton1---->(调用)clientSocket1.socket.sendtext('string');
   serverSocket收包后,返回一个string.   
   when  ServerSocket.Onread---->ServerSocket.socket.sendtext('ok");
   然后由clientSocket收回应答串。回显在edit1上。
问题:
   运行,且点击botton时client方出现错误信息:Asynchronous socket error 10053.
   server方出现错误信息:“由于套接字没有连接,并且(当使用一个sendto调用数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。(10057) On Api 'recv'"
   
    如何解决啊,请指教!!!!
   
 

解决方案 »

  1.   

    苹果socket不太熟。
    不过没看到连接啊。
    TCP服务器应该监听端口,客户机先建立连接,然后再发送消息。除非是UDP
      

  2.   

    哎,真是够烂的,你的C/S 两端的Socket连接上了没有呀
    "Asynchronous socket error 10053"
    10053错误就是典型的没有连接上而发送消息的错误
    I 服了 YOU!
    client.address ='127.0.0.1';
    client.port =1234
    client.active;
    client.sendtext('faint');^O^
      

  3.   

    对了,server端要先打开listen,不听就接不到的
      

  4.   

    to:xiaokang520
      问题如何在server端打开listen啊!
      

  5.   

    我的配置是:
    client.address ='10.10.2.25';
    client.port =4000
    client.active;server.address ='10.10.2.25';
    server.port =4000
    server.active;
      并且是先打开了server的,但就是连不上啊,什么原因啊???分不够可以再加!!!!!
      

  6.   

    我把防火墙和杀毒工具都关了,还是不行啊!!!!
    说是什么"目标机器积极地拒绝连接.....",我用的是windows advance server
      

  7.   

    server方出现错误信息:“由于套接字没有连接,并且(当使用一个sendto调用数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。(10057) On Api 'recv'"   有没有别的方法解决啊???
      

  8.   

    是否是在同一台机器上调试?
    怎么两个地址是一样的?
    如果只是打开,server.active,server.open,就可以了
      

  9.   

    对了,如果我没记错,好象不用设置serveraddress这个,好象也没有啊
      

  10.   

    原因我查出来了:
    procedure TForm1.ssClientRead(Sender: TObject; Socket: TCustomWinSocket);
    var
    str:string;
    begin
       str:=Socket.ReceiveText;//若这句为str:=ss.Socket.ReceiveText;就出错,why????????是delphi中的一个bug吗?
       edit1.Text:=str;
    end;
      

  11.   

    监听程序如下:
    procedure TForm1.listen1Click(Sender: TObject);
    begin
      Listen1.Checked:=not Listen1.Checked;
      if Listen1.Checked then
      begin
      ClientSocket1.Active:=False;
      ServerSocket1.Active:=True;
      StatusBar1.Panels[0].Text:='Listening...';
      end
      else
       begin
        if ServerSocket1.Active then
         ServerSocket1.Active:=False;
         StatusBar1.Panels[0].Text:='';
     end;
    连接程序如下:
    procedure TForm1.Connect1Click(Sender: TObject);
    begin
    if ClientSocket1.Active then ClientSocket1.Active:=False;
    if InputQuery('Computer to connect to','Address Name:',Servername) then
       //弹出对话框以便让用户输入服务器地址,可以是ip地址也可以是主机名
     if Length(Servername)>0 then
     with ClientSocket1 do
     begin
       Host:=Servername;
       Active:=True;
       Listen1.Checked:=False;//此时本机作为客户机,没有监听功能
     end
     else
       begin
       showmessage('请输入连接的主机地址!');
       end;
    end;
    连接结果显示:
    procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
    Listen1Click(nil);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
    Listen1Click(nil);
    end;procedure TForm1.ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
    StatusBar1.Panels[0].Text:='Connected to:'+Socket.RemoteHost;
    //连接成功
    end;
      

  12.   

    to qiqi97:
    什么阻塞方式和非阻塞方式啊,问题不在这要不你自已试试!
      

  13.   

    Socket.ReceiveText 和你的  SS.Socket.ReceiveText根本就不是一个SOCKET~~  看看帮助,我记得是这样的~
      

  14.   

    我机器上没有网卡,调试不了winsock的程序
    :(
    可以用你两端的设置,做一个最简单的SHOWMESSAGE试试,如果还有问题,应该就是楼上说的那样吧
      

  15.   

    to yan-hui:
    呵呵,我的服务器上只有一个serverSocket,"Socket.ReceiveText 和你的  SS.Socket.ReceiveText根本就不是一个SOCKET"????----那是哪个socket啊??