我采用的是非阻塞模式procedure TForm1.ServerSocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  str: Pchar;
  temp: pointer;
begin
  temp := nil;
try
  GetMEM(temp, 256);
  Socket.ReceiveBuf(temp^,256);//经过跟踪发现特temp中的内容被该了!!
  str := PChar(temp^);
  Application.MessageBox(str,'Receive');//这里现实的是乱码,字符数少的时候偶尔会正确
finally
  FreeMem(temp, 256);
end;
下面是发送的代码procedure TForm1.Button1Click(Sender: TObject);
var
  temp: pointer;
  i: integer;
  str: string;
begin
  str := Edit1.Text;
  temp := PChar(str);
  i := ClientSocket.Socket.SendBuf(temp , Length(str));end;

解决方案 »

  1.   

    socket.sendstring

    socket.receivestring
    方法
      

  2.   

    procedure TForm1.ServerSocketClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    var
      str: string;
      temp: pointer;
      n:integer;
    begin
      temp := nil;
    try
      GetMEM(temp, 256);
      n:=Socket.ReceiveBuf(temp^,256);//经过跟踪发现特temp中的内容被该了!!
      str := string(temp,n);
      Application.MessageBox(pchar(str),'Receive');//这里现实的是乱码,字符数少的时候偶尔会正确
    finally
      FreeMem(temp, 256);
    end;
      

  3.   


    试试下面的发送代码procedure TForm1.Button1Click(Sender: TObject);
    var
      //temp: pointer;
      temp: array of char;
      i: integer;
      str: string;
    begin
      str := Edit1.Text;
       setlength(temp, Length(Str)+1);
      //temp := PChar(str);
       StrPCopy(temp, Str);
      i := ClientSocket.Socket.SendBuf(temp , Length(str)+1);end;
      

  4.   

    ServerSocket1.Socket.Connections[i].SendText(s);
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      temp: array[0..1023] of Char;
      i: integer;
      str: string;
    begin
      str := Edit1.Text;
      StrPCopy(temp, Str);
      i := ClientSocket.Socket.SendBuf(temp , Length(str)+1);
    end;procedure TForm1.ServerSocketClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    var
      str: Pchar;
      temp: array[0..1023] of Char;
    begin
      temp := nil;
    try
      Socket.ReceiveBuf(temp,sizeof(temp));
      StrPCopy(temp, Str);
      Application.MessageBox(str,'Receive'
    end;
      

  6.   

    TO: Wally_wu(韦利) temp := nil;
    try
      Socket.ReceiveBuf(temp,sizeof(temp));
      StrPCopy(temp, Str);
      Application.MessageBox(str,'Receive')为何不用为temp 分配空间??
      

  7.   

    数组声明:
    temp: array[0..1023] of Char;
    不是为temp 分配空间了空间了吗,是一个0..1023字节的空间。只不过我没有使用指针,所以不需要使用Getmem来分分配,并且temp := nil;都应该省略,这是我写错的地方。