做一个SOCKET通信传递字符的程序,因为在发送的时候并不是每次都会将你给定的字符全部发送出去,如果底层的SOCKET缓冲区
空间不够的话,就只会发送部分字符,如果全部是中文件,而缓冲区的空间只有奇数字节,则会将最后一个中文字符截断,这样在服务器收到数据后,如果发现长度不够,且最后一个中文字符让截断了,就在下一个包收到的时候将两截合并起来.就用下面的代码进行了分解测试.帮忙看一下有什么BUG
var
S:String;
i:Word;
S3:Array [0..1] of Byte;
PStr:PChar;
begin
S:=Trim(edt_Str.Text);
if Length(S)<=0 then
Exit;
//第一个字符
edt_StrHex1.Text:=IntToHex(Byte(S[1]),2);
//第二个字符
edt_StrHex2.Text:=IntToHex(Byte(S[2]),2);
//组合数字
S3[0]:=Byte(S[1]);
S3[1]:=Byte(S[2]);
i:=PWord(@S3)^;
edt_StrHex3.Text:=IntToHex(i,4); //合并还原
PStr:=PChar(@i);
edt_Str2.Text:=S;
end;
空间不够的话,就只会发送部分字符,如果全部是中文件,而缓冲区的空间只有奇数字节,则会将最后一个中文字符截断,这样在服务器收到数据后,如果发现长度不够,且最后一个中文字符让截断了,就在下一个包收到的时候将两截合并起来.就用下面的代码进行了分解测试.帮忙看一下有什么BUG
var
S:String;
i:Word;
S3:Array [0..1] of Byte;
PStr:PChar;
begin
S:=Trim(edt_Str.Text);
if Length(S)<=0 then
Exit;
//第一个字符
edt_StrHex1.Text:=IntToHex(Byte(S[1]),2);
//第二个字符
edt_StrHex2.Text:=IntToHex(Byte(S[2]),2);
//组合数字
S3[0]:=Byte(S[1]);
S3[1]:=Byte(S[2]);
i:=PWord(@S3)^;
edt_StrHex3.Text:=IntToHex(i,4); //合并还原
PStr:=PChar(@i);
edt_Str2.Text:=S;
end;
第500个汉字只发了一半,剩余的部分用Copy(S,1000,2000)来发送。自己的通信格式也不能保存不让截断的。