求救!!!连接成功,发送成功,为什么收不到数据,为什么为什么?!你们试下,有木有?!有木有?!直接贴代码
//服务器端 Form创建都有WSAStartUp----------------------------
procedure TFrmServer.Button1Click(Sender: TObject);
var
  dThreadID: DWORD;
  iInt, iRes: Integer;
  SocketAddr: SockAddr_In;
begin
  SocketSer := Socket(AF_INET, SOCK_STREAM, IPPROTO_IP);  //TCP:SOCK_STREAM  //UDP: SOCK_DGRAM
  if SocketSer = INVALID_SOCKET then begin        
    ShowMessage('创建socket出错!');
    Exit;
  end;  with SocketAddr do begin
    sin_family := AF_INET;    iRes := Inet_addr(PChar(Edit1.text));
    if iRes = INADDR_NONE then begin
      ShowMessage('无效IP!');
      Exit;
    end;
    sin_addr.S_addr := iRes;    Val(Edit2.Text, iInt, iRes);
    if iRes <> 0 then begin
      ShowMessage('无效端口!');
      Exit;
    end;
    sin_port := htons(iInt);    if Bind(SocketSer, SocketAddr, SizeOf(SocketAddr)) <> 0 then begin
      ShowMessage('绑定socket出错');
      Exit;
    end;
  end;  if Listen(SocketSer, SOMAXCONN) = SOCKET_ERROR then begin
    ShowMessage('监听出错!');
    Exit;
  end;  LExit := False;
  Button1.Enabled := False;  
  BeginThread(nil, 0, @ServerAccept, Pointer(SocketSer), 0, dThreadID);
end;
procedure ServerAccept(LSock: TSocket); stdcall;
var
  IP :string;
  SockAddr: SockAddr_In;
  SockAddr_Len: Integer;
  SocketRecev: TSocket;
  pNewClient: pClients;
begin
  SockAddr_Len := SizeOf(SockAddr);             while not LExit do begin
    SocketRecev := accept(LSock, @SockAddr, @SockAddr_Len);
    if SocketRecev < 1 then begin
      Sleep(500);
      Continue;
    end;
    
    IP := IntToHex(SocketRecev, 2)
        + '-' + IntToStr(Ord(SockAddr.sin_addr.S_un_b.s_b1))
        + '.' + IntToStr(Ord(SockAddr.sin_addr.S_un_b.s_b2))
        + '.' + IntToStr(Ord(SockAddr.sin_addr.S_un_b.s_b3))
        + '.' + IntToStr(Ord(SockAddr.sin_addr.S_un_b.s_b4))
        ;
    FrmServer.Memo1.Lines.Append(IP);    GetMem(pNewClient, SizeOf(TClients));
    NowSocket := SocketRecev;
    pNewClient.Socket := SocketRecev;
    pNewClient.SocketAddr := SockAddr;
    LList.Add(pNewClient);
    SocketWorkThread(SocketRecev);
  end;
  EndThread(0);
end;
procedure SocketWorkThread(LSock: TSocket);
var
  iRes: Integer;
  BufRecv: pChar;
begin
  GetMem(BufRecv, BufLen);
  ZeroMemory(bufRecv, buflen);    
  iRes := recv(LSock, BufRecv, BufLen, 0);
  if iRes < 1 then begin
    if iRes = SOCKET_ERROR then begin
      for iRes := 0 to LList.Count -1 do
        if LSock = pClients(LList.Items[iRes]).Socket then begin
          LList.Delete(iRes);
          Break;
        end;
      CloseSocket(LSock);
      FrmServer.Memo1.Lines.Add(IntToHex(LSock, 2)+'退出');
    end;
  end else
    FrmServer.Memo1.Lines.Add(BufRecv);
  FreeMem(BufRecv);
end;
//发送消息        〈〈------------------------------------------------
procedure TFrmServer.Button3Click(Sender: TObject);
var
  Info:string;
  BufSend: pchar;
  Re:Integer;
begin
  if NowSocket = -1 then Exit;
  GetMem(BufSend,BufLen);
  ZeroMemory(BufSend,BufLen);
  Info:=Edit3.Text;
  StrPCopy(BufSend,Info);
  Re:=send(NowSocket, BufSend^, Length(BufSend), 0);
  if Re = SOCKET_ERROR then begin
    ShowMessage('发送数据失败');
    Exit;
  end;
  FreeMem(BufSend);
end;
----------------------------------------------------------------------------------
//客户端  Form创建都有WSAStartUp
procedure TFrmClient.Button1Click(Sender: TObject);
var
  dThreadID: DWORD;
  iInt, iRes: Integer;
  SocketAddr: SockAddr_In;
begin
  SocketCl := socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
  if SocketCl = INVALID_SOCKET then begin
    ShowMessage('建立socket出错!');
    Exit;
  end;  with SocketAddr do begin
    sin_family := AF_INET;    iRes := inet_addr(PChar(Edit1.text));
    if iRes = INADDR_NONE then begin
      ShowMessage('无效IP!');
      Exit;
    end;
    sin_addr.S_addr := iRes;    Val(Edit2.Text, iInt, iRes);
    if iRes <> 0 then begin
      ShowMessage('无效端口!');
      Exit;
    end;
    sin_port := htons(iInt);
  end;  if Connect(SocketCl, SocketAddr, SizeOf(SocketAddr)) <> 0 then begin
    ShowMessage('连接错误');
    Exit;
  end;
  
  LExit := False;
  Button1.Enabled := False;
  BeginThread(nil, 0, @Receive, Pointer(SocketCl),0, dThreadID);
end;
procedure Receive(LSock :TSocket);stdcall;
var
  BufRecv: pChar;
  iRes: Integer;
begin
  GetMem(BufRecv, buflen);
  while not LExit do begin
    iRes := recv(LSock, BufRecv^, buflen, 0);
    if iRes < 1 then begin
      Sleep(500);
      Continue;
    end;    FrmClient.memo1.Lines.Add(StrPas(BufRecv));
    ZeroMemory(bufRecv, buflen);    
  end;
  FreeMem(BufRecv);
  CloseSocket(LSock);
  ExitThread(0);
end;
//发送消息         〈〈------------------------------------------------
procedure TFrmClient.Button3Click(Sender: TObject);
var
  Info:string;
  BufSend: pchar;
  Re:Integer;
begin   
  GetMem(BufSend,BufLen);
  ZeroMemory(BufSend,BufLen);
  Info:=Edit3.Text;
  StrPCopy(BufSend,Info);
  Re:=send(SocketCl, BufSend^, Length(BufSend), 0);
  if Re = SOCKET_ERROR then begin
    ShowMessage('发送数据失败');
    Exit;
  end;
  FreeMem(BufSend);
end;
----------------------------------------------------------------------------------