Socket多线程问题

                            
我想让一个SOCKET监听连接,然后每有一个连接,就启动一个新线程和客户端通信,可怎么都无法接到客户发来的消息,我用api写的,具体该怎么做?代码如下   
  addr.sin_family   :=   AF_INET;  
            addr.sin_addr.S_addr   :=   inet_addr('127.0.0.1');////htonl(1921682187);  
            addr.sin_port   :=   htons(UDPPORT);  
            Bind(s,   addr,   sizeof(addr));  
   
            sa.sin_family   :=   AF_INET;  
            len:=sizeof(sa);  
            getsockname(s,sa,len);  
            ip:=inet_ntoa(sa.sin_addr);  
            port:=inttostr(ntohs(sa.sin_port));  
            StatusBar1.Panels[1].Text:='LocalIp:'+Ip+'     LocalPort:'+port;  
            WSAAsyncSelect(s,   frmmain.Handle   ,   WM_SOCK,   FD_READ   or   FD_ACCEPT   or   FD_CONNECT   or   FD_CLOSE);  
  上面是主进程,监听  
   
  procedure   Tfrmmain.ReadData(var   Message:   TMessage);  
  var  
        buffer:   Array   [0..4095]   of   char;  
        len,i:   integer;  
        flen:   integer;  
        Event:   word;  
        value:   string;  
        clientip,clientport:string;  
        acc:TSockAddrIn;  
        data:string;  
        SubThread:ServerThread;  
  begin  
            Event   :=   WSAGetSelectEvent(Message.LParam);  
            tt:=11;  
            case   Event   of  
            {if   Event   =   FD_CONNECT     then  
            begin  
                      //len   :=   recvfrom(s,   buffer,   sizeof(buffer),   0,   FSockAddrIn,   flen);  
                      //value   :=   copy(buffer,   1,   len);  
                      //showmessage(value);  
                      //HandleData(value);  
                      StatusBar1.Panels[2].Text:='状态:Connect...';  
            end;}  
            FD_ACCEPT:  
                begin  
                    StatusBar1.Panels[2].Text:='State:Accept...';  
                    connnum:=connnum+1;  
                    statusbar1.Panels[0].Text:='Connect   Numbers:'+inttostr(connnum);  
                    acc.sin_family:=af_inet;  
                    len:=sizeof(acc);  
                    AccS:=accept(s,@acc,@len);  
   
                    SubThread:=ServerThread.Create(false,AccS);//启动新线程  
                     
                    clientip:=inet_ntoa(acc.sin_addr);  
                    clientport:=inttostr(ntohs(acc.sin_port));  
                    memo1.Lines.Add('ClientIp:'+clientip);  
                    memo1.Lines.Add('ClientPort:'+clientport);  
                    memo1.Lines.Add('------------------------');    
                end;  
            FD_CLOSE:  
                begin  
                    connnum:=connnum-1;  
                    statusbar1.Panels[0].Text:='Connect   Numbers:'+inttostr(connnum);  
                    closesocket(accs);  
                    if(connnum=0)   then  
                        StatusBar1.Panels[2].Text:='State:Listing...';  
                end;  
             
   
  end;  
   
  请高手看看

查看回复