delphi7的socket编程。我没有使用tcpserver控件,而是自动生成socket的。  
程序在下面啊。先建立socket  然后绑定bind  然后监听lisent  然后接受accept  然后接收recv。但程序中recv每次都返回-1,不能接收到数据。  
   调了2天,我是真的没办法了,各位朋友帮帮忙啊!帮我看看哪里错了  
不甚感激  
 
       //1.置中断为假  
       Global_QuitReq  :=  false;  
       //2.初始化客户端结构  
       fillchar(server_addr,  sizeof(server_addr),  0);  
       //2.1    端口  
       server_addr.sin_family  :=  AF_INET;  
       server_addr.sin_port  :=  htons(GlobalListenPort);  
       //2.2    主机IP  
       server_addr.sin_addr.S_addr  :=  inet_addr(Pchar(GlobalServerIP));  
       if  server_addr.sin_addr.S_addr  =  INADDR_NONE  then  
       begin  
           ShowMessage('初始化出错,绑定IP地址非法!');  
           exit;  
       end;  
       //3.创建SOCK  
       Global_Sock_Accept  :=  socket(AF_INET,  SOCK_STREAM,  0);  
       if  (Global_Sock_Accept  =  SOCKET_ERROR)  then  
       begin  
           ShowMessage('初始化出错,无法创建SOCK!');  
           exit;  
       end;  
 
       //4.绑定  
       if  (bind(Global_Sock_Accept,  server_addr,  sizeof(server_addr))  <>  0)  then  
       begin  
           showmessage('初始化出错,无法绑定!');  
           exit;  
       end;  
       //5.监听  
       if  (listen(Global_Sock_Accept,  5)  <>  0)  then  
       begin  
           showmessage('初始化出错,无法监听!');  
           exit;  
       end;  
       //6.设置  
   //    PostMessage(FMainForm.Handle,  CM_SETAppearance,  0,  0);  
 
       //7.循环等待请求  
       while  (not  Global_QuitReq)  do  
       begin        
           i  :=  sizeof(client_addr);  
           fillchar(client_addr,  i,  0);          
           ns  :=  accept(Global_Sock_Accept,  addr(client_addr),  addr(i));  
           if  ns=-1  then     
               begin  
                 test:='socket  error';  
                 exit;  
               end;  
 
           fillchar(rbuf,  sizeof(rbuf),  #0);  
           recvlen:=recv(Global_Sock_Accept,rbuf,sizeof(rbuf),0)  ;  
           if  recvlen>0  then  //出错。每次都返回-1,没有接收到数据 
             begin  
                 test:='socket  error';  
                 exit;  
             end;  
 
       end;  
end;

解决方案 »

  1.   

    recv不是放在那,客户没CONNECT,RECV会出错的
    当客户CONNECT上
    accept在服务部创建一个连接用这个连接才可接收.
      

  2.   

    SOCKCMP请得最清楚了.我有一个回调实例
      

  3.   

    ns  :=  accept(Global_Sock_Accept,  addr(client_addr),  addr(i));  
               if  ns=-1  then     
                   begin  
                     test:='socket  error';  
                     exit;  
                   end;  
     
               fillchar(rbuf,  sizeof(rbuf),  #0);  
               recvlen:=recv(Global_Sock_Accept,rbuf,sizeof(rbuf),0)  ; //这一句有错该为下面的
               recvlen:=recv(ns,rbuf,sizeof(rbuf),0)  ;//ns才是真正的数据接收的socket
    给分吧!!!