比如Client端有一串字符,要将它传送给Server,用SendText最大可以传送多少个字节。这些字符全部传送完后,在服务器端是不是只产生一个OnClientRead 事件?
或者我要传送一个结构为:
TSendData = Record
Name : string;
Count : integer;
Size : int64;
end;
var
sendData : TsendData;sendData.name := 'hahahha';
SendData.Count := 64;
SendData.Size := 12;我如何把SendData 这些值传送过去Server, Server又如何读取这些数据??
或者我要传送一个结构为:
TSendData = Record
Name : string;
Count : integer;
Size : int64;
end;
var
sendData : TsendData;sendData.name := 'hahahha';
SendData.Count := 64;
SendData.Size := 12;我如何把SendData 这些值传送过去Server, Server又如何读取这些数据??
接收的时候按结构体接收:DataRecv(sendData^, SizeOf(sendData^));
一般发送的数据过大的时候,就会分包发送,你可以看返回值,比如:你发送的数据有1024
实际一次只接收了512,那么就是两次!
Name : string[10]; ///////////////
Count : integer;
Size : int64;
end;
上面的方法才可以正常使用
TSendData = Record
Name : string[10]; ///////////////
Count : integer;
Size : int64;
end;第二次发送为:
TSendData = Record
Name : string[10]; ///////////////
Send_Type : Byte;
Message : String[255];
Count : integer;
Size : int64;
end;
客户端发包要如何定义才能让服务器识别它是什么数据呢??
另外,当其中有一串数据很大,分了两个包发出,服务器ReceiveBuf(sendData,sizeof(sendData));会不会读出两次不同的结果?
包体,发送不同的包体之前先发送它的包头。接收:
不用管什么接收事件(当然接收代码还得写在这个事件里)。
先接收包头
Socket.writebuffer(HEADER ,sizeof(THEADER));
解析后就知道要接收哪个包了
Socket.ReceiveBuf(sendData,sizeof(sendData));
我做的东西也是要传文字+数据,下位机用的是vc写的串口通信,因为我的数据是先通过串口发送到inter网,然后再接收到主机的,主机这边是delphi写的,我想能不能在下位机vc写的串口通信里定义一个struct ss,然后在主机这边定义同样的record ss;读数据,这样行吗?
例如:
procedure TestSendData;
begin
ClientSocket.Socket.sendBuff(sendData,Sizeof(sendData));
在这里等待回应;
ClientSocket.Socket.ReceiveBuf(ReceData,Sizeof(ReceData));
//下面如何判断是否收到回应数据,再做相应操作呢??
end;