作者leslieha (懂的付出才会幸福)
看板C_and_CPP
标题Re: [问题] bcb的socket相关
时间Tue May 5 19:37:06 2009
※ 引述《evileva (小黑要乖喔)》之铭言:
: 我在同一个function里
: 要对同一个connection传送两笔资料,
: EX:
: for(i=0;i<connectcount-1;i++) {
: ServerSocket1->Socket->Connections[0]->SendText(point[i+1]+200);
: }
: ServerSocket1->Socket->Connections[connectcount-1]->SendText((connectcount+100));
: 他封包还是会传,但似乎会把两笔传送的资料做结合後才传送,
: 不知道该怎麽修改才能成功?
: 有试过ServerSocket1->Free();,
: 会出现错误,但第一笔资料的值会成功传送,
: 只是到第二笔资料就会产生错误而中断,
: 想请问各位前辈,这边应该怎麽做修改呢?
这原因是因为 Nagle Algorithm
自己试过 ClientSocket IdTCPClient(虽然把UseNagle=false) 都无法达成
後来直接改用 win socket来作
而不用BCB 6.0提供的
include Winsock2.h Ws2tcpip.h
Project -> Opeiotns- > Directories/Conditionals -> Conditionnal defines ->
加上 _WINSOCKAPI_
在connect前加上
BOOL bOpValVal = 1;
int bOptLen = sizeof(BOOL);
if(setsockopt(mSocket, IPPROTO_TCP, TCP_NODELAY, (char*)&bOptVal, bOptLen)
!= SOCKET_ERROR)
{
memoSocketLog->Lines->Add("Set TCP_NODELAY: ON");
}
就可以了
但是.....
我把send包在一个timer内
interval设50
仍然会被包在同一个packet送出去
我想...这应该就是网卡的问题了...吧?
还是你要用winpcap
之前用winpcap在debain上跑+intel chip的NIC,叫它送就送一个packet,都没有偷懒 XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.120.32.49