socket 高手快点吧(100分)

  • 主题发起人 主题发起人 zdy0155
  • 开始时间 开始时间
Z

zdy0155

Unregistered / Unconfirmed
GUEST, unregistred user!
我用 socket 传文件,
将传送的大小定为4092

if (text=="recvice")
{ count=count+4092;
if (total-count>4092)
{ file->Read(buf,4092);
send_socket->Socket->SendBuf(buf,4092);
}
else
{ length=total-count;
file->Read(buf,length);
send_socket->Socket->SendBuf(buf,length);
}
}
这样一来一往
怎么说有10055 错误啊,这个错误是缓存不够,可我怎么处理啊!
还有我的程序运行多次后,can't new socket
这个怎么处理啊

 
完整代码帖出来。
 
我没有用过c++b,但是你这段代码还是很简单的。
如果要解决问题,我想有需要注意以下三个方面。
1.count,total的逻辑意义,逻辑关系是否正确?
2.file.read的方法是否正确?
3.buf是在哪里定义的,是否与别的代码互相冲突?建议采用锁定socket及使用buf过后手工清空buf的方法。
我对每个问题只回答一次,如果你需要我的帮助,可以在我上线时交流,或者
请发信到我的email,pengrongquan2003@yahoo.com
 
完整的代码帖出来!!
不然很难看出问题!逻辑性不强啊 ![:(!]
 
我原来写的 阻塞模式
function TForm1.SendToServer(buf: PChar; len: Integer): Integer;
var
WriteBytes: Integer;
WriteTotal: Integer;
begin
WriteTotal := 0;
while (WriteTotal < len) do
begin
WriteBytes := send(TheSocket, Buf[WriteTotal], len - WriteTotal, 0);
if (WriteBytes = SOCKET_ERROR) then
begin
WriteLog('send error :' + IntToStr(WSAGetLastError));
break;
end;
WriteTotal := WriteTotal + WriteBytes;
end;
result := WriteTotal;
end;
 
同意彭荣全,应该是buf用后没有及时释放
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
673
import
I
I
回复
0
查看
970
import
I
后退
顶部