我采用的是非阻塞模式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;
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;
和
socket.receivestring
方法
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;
试试下面的发送代码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;
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;
try
Socket.ReceiveBuf(temp,sizeof(temp));
StrPCopy(temp, Str);
Application.MessageBox(str,'Receive')为何不用为temp 分配空间??
temp: array[0..1023] of Char;
不是为temp 分配空间了空间了吗,是一个0..1023字节的空间。只不过我没有使用指针,所以不需要使用Getmem来分分配,并且temp := nil;都应该省略,这是我写错的地方。