关于Indy IdUDPClient的问题(200分)

  • 主题发起人 主题发起人 PROSE
  • 开始时间 开始时间
P

PROSE

Unregistered / Unconfirmed
GUEST, unregistred user!
我用UDPClient1.SendBuffer(SendBuff,i);发送了数据包,如何得到服务器的返回状态,并判断是否成功,服务器
返回的是几个16进制数
 
那沒辦法確定的. 因為UDP協議只是非連接的協議,UDP包發出去之后,無法知道服務器是否收
到.服務器收到之后如何回應,就看服務器處理代碼怎樣寫了.
 
能给我你的QQ吗??谢谢!!
我发现UDPClient1.ReceiveBuffer(ServerBuff,i,-1);这个函数,是不是服务器端的返回信息???
我定义了ServerBuff : Array[1..MAX_BUFF] of char; i:integer,这样ServerBuff是不是就能得到
服务器的回应了
根据我们自己的协议,服务器返回为
CORRECT: STX ACK ETX CRC
ERROR: ST X NAK errcode ETX CRC
其中STX 0x01
ETX 0x02
ACK 0x03
NAK 0x04
ERRCODE分别为01、02、03、我该如何获得服务器的反应,并读取,做判断???谢谢
 
用UDP你可以知道自己是否正确发出了,但不能保证对方是否收到(但在局域网中一般是不会
有问题的),如果想要可靠性高一定,可以用TCP。
 
所以有验证的服务器回发,我们使用的是公共协议,不是我们定义的,我们就是要写个客户端
 
无人帮忙吗???
 
UDPClient1.ReceiveBuffer(ServerBuff,i,-1); 是可以等待返回信息的.不過它等待的時間是系統
默認的時間,或者你用UDPClient1.ReceiveBuffer(ServerBuff,i,-2);則是無限制的等待.
然后用ServerBuff[1],ServerBuff[2]來讀取字節數據.或者
var
B:Byte;
W:Word;
I:Integer;
begin
Move(ServerBuff[1],B,SizeOF(B)); //讀取一個字節到B,
Move(ServerBuff[1],W,SizeOf(W)); //讀取一個字(word)到W
Move(ServerBuff[1],I,SizeOf(I)); //讀取一個整數(Integer)到I
//另外,修改ServerBuff[?],可以達到第幾個字節開始讀取的效果.
end;
 
接受答案了.
 
后退
顶部