SendBuf中的第一个参数是PChar类型,所以你必须将NewData转换成字符流发送,然后再服务端解释所收的字符流。比如
SendData.Login := False;
SendData.LoginName:='test';
SendData.LoginPsw:='psw';
SendData.SendMsg :=sendmsg_memo.Text ;在客户端:
SendBuff :Array[0..1023] of Char;
If SendData.Login = False Then
  SendBuff[0] := '0';
SendBuff[1] := #0;
For i:=2 To Length(SendData.LoginName) Do
  SendBuff[i] := SendData.loginName[i-1];
SendBuff[i+1] := #0;
...
主  题:请教一个SOCKET ReceiveBuf的问题
作  者:ad100
所属论坛:Delphi
问题点数:20
回复次数:1
发表时间:2001-7-6 8:49:49
 
  
  源代码如下,奇怪的是使用SendBuf,receiveBuf时,客户端发送没出错,但服务端出错说是访问冲突,但更改为ReceiveText,SendText时却是正常的,请帮忙看一下,谢谢!
ServerSocket:type NewData=Record
        Login:boolean;
        LoginName:String;
        LoginPsw:String;
        TargetUser:String;
        SendMsg:String;
        end;
GetData:NewData;
procedure Tmain_frm.ServerSocketClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
        i:integer;
str:string;begin
i:=0;
serversocket.Socket.Connections[i].ReceiveBuf(GetData,Socket.ReceiveLength);
str:=getdata.loginname;
//showmessage(serversocket.Socket.Connections[i].ReceiveText); 正常
end;
ClinetSocket:
type  NewData=Record
        Login:boolean;
        LoginName:String;
        LoginPsw:String;
        TargetUser:String;
        SendMsg:String;
        end;
SendData:NewData;
procedure Tmain_frm.FlatButton3Click(Sender: TObject);
begin
SendData.LoginName:='test';
SendData.LoginPsw:='psw';
SendData.SendMsg :=sendmsg_memo.Text ;
clientsocket.Socket.SendBuf(SendBuff,SizeOf(sendBuff)); 在服务端:
ReciveBuff :Array[0..1023] of Char;serversocket.Socket.Connections[i].ReceiveBuf(ReciveBuff,Socket.ReceiveLength);
If ReciveBuff[0] = '0' Then
   ...
tmpStr := Copy(ReciveBuff,2,Len);
if tmpStr = LoginName Then
  ReciveBuff[0] := '1';
...可以用以上变通的方法来实现,一般在Socket编程中都是这样的。要定义好一个好的消息结构才行。呵呵~~~
SendBuffer