Re: [問題] bcb的socket相關
看板C_and_CPP (C/C++)作者leslieha (懂的付出才會幸福)時間16年前 (2009/05/05 19:37)推噓0(0推 0噓 0→)留言0則, 0人參與討論串2/2 (看更多)
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章