我写了一个Socket传输二进制数据的程序,发现在接收的时候有问题,在发送的时候BYTE的值是90,67,90,67,90,67,32……,长度是153,可是在接收的时候发现接收进来的二进制数据变了,是0,0,0,1,0……,长度上万,大的惊人。请问是怎么回事。
部分代码如下:
var
bytTele: array of byte;
iLen: integer; SetLength(bytTele,iLen);
Socket.ReceiveBuf(bytTele, iLen);
执行后发现bytTele的数值与发送的时候不一样,请问怎么解决。
部分代码如下:
var
bytTele: array of byte;
iLen: integer; SetLength(bytTele,iLen);
Socket.ReceiveBuf(bytTele, iLen);
执行后发现bytTele的数值与发送的时候不一样,请问怎么解决。
解决方案 »
- WindowMediaPlayer在分線程里無法播放
- 如何解决win98下程序关闭出错!!在线等,解决问题立即上水!!!!
- 怎么用SQL语句删除一条记录?
- 大话编程
- 关于用ADO连接SQLSERVER的问题?
- 請問如何可以動態的修改mdb數據庫結構
- 请教一个图形缩放问题...
- 有个浏览器控件,浏览器浏览的页面里面有个text框 如何取得这个框里面输入的内容(50分送给各位)
- 我对table增加了一列查找列之后,每次运行都报告找不到对应的“列”如:Ffield'id'not found,请高手一定要帮忙啊!!
- 做软件测试版时如何限制天数,如何设置注册码?请各位指教?
- DELPHI能实现字符串截取功能吗?
- 两个窗体的互动功能
bytTele: array of byte;
iLen, count:integer;
str: string; SetLength(bytTele,iLen);
SetLength(str,iLen);
Socket.ReceiveBuf(bytTele, iLen);
for count:=1 to iLen do
str[count]:=char(bytTele[count-1]);
Memo1.Lines.Text:=str;发送的代码:
bteTemp:=myTC_StrToDab(Memo1.Lines.Text);
Socket.SendBuf(bteTemp, Length(bteTemp));其中myTC_StrToDab是把字符串转换成二进制。
function TForm1.myTC_StrToDab(AString: string): TOneDynArrayByte;
var
i,iLength:Integer;
my_DynArrayOfByte:TOneDynArrayByte;
begin
iLength:=length(AString);
SetLength(my_DynArrayOfByte,iLength);
for i:=1 to iLength do begin
my_DynArrayOfByte[i-1]:=Byte(AString[i]);
end;
Result:=my_DynArrayOfByte;
end;
************************************************
采用的是非堵塞方式。TCP/IP。
现在主要是在接收的时候有问题,在接收时,执行完
Socket.ReceiveBuf(bytTele, iLen);
我察看bytTele的值,发现与发送的时候不一样,所以在后面的二进制转换成字符串的时候不能正确显示。应该怎么办呀。
Socket.SendBuf(bteTemp[0], Length(bteTemp));试试?
说对了,收发方都要加[0],SendBuf,ReceiveBuf里面的参数是要传地址。虽然还是有些不是特明白,但是至少问题解决了,多谢,准备接分吧。呵呵。