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
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
解决方案 »
- 大虾帮忙看下 下面的SQL语句 为什么老是提示 多了个)
- 请问 我这句数据库更新语句哪里有问题 谢谢!!
- 高分:vskin换肤问题:换肤后,我的打印窗体总是不能最大化了,最问怎么解决呀!
- 函數參數有個類型是 const avr:Variant我是不是不能改變他?
- 如何检测到当前存在多少个可用串口?
- 看看quicmous同志有水平的发言!是关于汉语编程那篇文章的呵呵。
- 文件关联
- StringGrid破控件,谁能实现改变单元格字体!
- 请大家详细讲讲sender和owner。(nofog兄过来看)
- 如何在程序的菜单项上调windows程序
- 怎么编程生成exe文件?
- 关于interface not support的问题
我已找到解决办法,就是将记录改了一下:
type NewData=Record
Login:boolean;
LoginName:String[20];
LoginPsw:String[20];
TargetUser:String[20];
SendMsg:String[100];
end;