TWinSocketStream问题,各位高手请进......(50分)

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

yykd_123456

Unregistered / Unconfirmed
GUEST, unregistred user!
我用delphi的TServerSocket和TClientSocket控件做通讯程序,均采用阻塞模式,由Client端向Server端发起一个数据请求指令后,Server端揗环向Client端发送数据包,Client来接收数据,在接收时出现了问题,发现Client接收数据的长度不对,比如说本来要接收40个字节的数据却只接收到了30个字节的数据,再次去接收其余的数据却收不到数据了!请各位大虾想想这是什么问题呢?分一定不少的!
 
把代码放出来看看,要不怎么知道你那里出了问题
还有是TClientSocket是有bug的,有时候会触发OnRecv但收到长度是0。
就因为这样没用他很久了。
 
开心人:下面的是我的客户端的代码:
var
p_Pack : TTestPackage;
p_Head : TTestHead;
p_Data : TTestData;
SocketStream : TWinSocketStream;
BytesCount : Integer;
less : Integer;
Begin
While Not Terminated And MySocket.Socket.Connected Do
Begin
try
SocketStream := TWinSocketStream.Create(MySocket.Socket, 60000);
try

If SocketStream.WaitForData(60000) Then
Repeat
//Receive p_Head......
FillChar(p_Head,sizeof(p_Head),0);
BytesCount := SocketStream.Read(p_Head,sizeof(p_Head));
//BytesCount := MySocket.Socket.ReceiveBuf(p_Head,sizeof(p_Head));
if BytesCount <> sizeof(p_Head) then
begin
MessageBox(0,'Client Receive p_Head is Error','title',MB_ICONERROR);
end
else
begin
//Receive p_Data......
FillChar(p_Data,sizeof(p_Data),0);
BytesCount := Socketstream.Read(p_Data,p_Head.length - 8);
//BytesCount := MySocket.Socket.ReceiveBuf(p_Data,p_Head.length-8);
if BytesCount <> p_Head.length - 8 then
begin
less := p_Head.length - 8 - BytesCount;
//上面出现了不对,将剩下的字节数取过来,就取不不对了,这时服务器端仍在发送数据
BytesCount := SocketStream.Read(p_Data,less);
if BytesCount <> less then
begin
MessageBox(0,'Client Receive p_Data is Error','title',MB_ICONERROR);
ShowMessage(IntToStr(BytesCount));
end;
end;
end;
Until Not SocketStream.WaitForData(60000);
finally
SocketStream.Free;
MySocket.Close;
end;
except
end;
End;
End;
 
TClientSocket是有bug?????
那怎么办,直接使用 WIN API代替?
 
一个利用WinSocket控件传送文件的Demo。
http://www.aidelphi.com/6to23/docu/transfile.zip
要不你参考一下这个??
 
后退
顶部