Re: [問題] bcb的socket相關

看板C_and_CPP (C/C++)作者 (懂的付出才會幸福)時間16年前 (2009/05/05 19:37), 編輯推噓0(000)
留言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
文章代碼(AID): #1A02JZn6 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1A02JZn6 (C_and_CPP)