关于WinSocket求助(100)

  • 主题发起人 主题发起人 yiqifengfa
  • 开始时间 开始时间
Y

yiqifengfa

Unregistered / Unconfirmed
GUEST, unregistred user!
前人用delphi编的服务器用来和VC编的客户端通信,有些不合理的地方,老板让我这个没接触过Delphi的新手修改,有些程序看不通望大牛指导:按文档说明应当是:服务器与客户端通信时:服务器端确认后返回值4E4E客户端每发送1包,等待服务器返回确认。如果返回0x0E0E,表示数据传送正确,继续下一包;如果返回0x4545,表示数据传送错误,重新发送这一包。通信协议中应该有类似以上的关键字,但是我从下面这段(即与客户端进行socket连接的一段程序)中并没有看懂相关的东西,该段后半部分的一句ClientSocket.SendText('E');这个倒是符合要求 E的ASCII即16进制的45相关语句如下:Begin While Not Terminated And ClientSocket.Connected Do begin Try //如果没有接受数据,延时10秒后中断连接线程 SocketStream := TWinSocketStream.Create(ClientSocket, 10000); Try if Not RecvingClient then begin FillChar(FirstData, SizeOf(FirstData), 0); If SocketStream.Read(FirstData,8) = 0 Then Begin ClientSocket.SendText('Timeout on Server'+#13#10);//这句向socket发送的是什么?????????? sleep(1); ClientSocket.Close; Terminate; End; CBufRecv:=FirstData; if JudgeCustomer(CBufRecv) then begin ClientSocket.SendBuf(CBufRecv^,2);//这句是否也是和客户端连接的。发送内容是什么呢??????? //列为已注册用户 InsertClientToTre(ClientSocket.RemoteAddress,FrmMain.TreeView1.Items[0]); end else begin //列为未知用户 InsertClientToTre(ClientSocket.RemoteAddress,FrmMain.TreeView1.Items[1]); ClientSocket.SendText(Copy(String(FirstData),0,2));//该句发送的是????????? CBufRecv^:=char(5); end;
 
如果返回0x0E0E,表示数据传送正确,继续下一包;如果返回0x4545,表示数据传送错误,重新发送这一包。用WriteBuffer,readBuffer吧vard:WORD;d:= 0x0E0E;writeBuffer(d);varf:word;f:=0;readbuffer(f);
 
你没看到的地方,也许就是不合理的地方,也许就是你需要改动的地方。看你上面的代码,貌似你的前辈没有按照通讯协议来完成工作呀。这就是要完成的改动吧。怪不得需要改动。
 
哦,我可能没有说清楚,又重新修改了一下,现在老板要求先读懂程序,不过有几句实在理解不了,感觉相应的发送到socket的字符串与他们留下的文档中说明的不相符,也可能是相符的我没有看懂,所以想请教一下前人写这个确实让我有点难理解,我上文中提到的,就在我发的程序后面还有一句向socket发送字符'E',想了很长时间才明白字符E的ASCII码是69,在转换成16进制就是45这才弄明白,不知道我存在问题的几句中是否也是类似的比较绕弯呢,所以我没有看懂
 
后退
顶部