2020-11-16

socket接收數(shù)據(jù)時通過監(jiān)聽來防止無數(shù)據(jù)接收造成的阻塞等待

關鍵字:c++ dll activiz socket通信

參考鏈接socket C編程設置接收超時(Windows & Linux)_chenyulancn的專欄-CSDN博客

背景:編寫一個c#界面程序禽车,其中包含一個激光雷達的顯示模塊唤锉。該模塊包含激光雷達數(shù)據(jù)接收/解析/顯示功能。該模塊采用c++編寫肠虽,并編譯成一個dll庫供c#主程序進行調(diào)用旁舰。接受雷達數(shù)據(jù)的功能采用socket通信進行實現(xiàn)母蛛,要對udp接收時間進行監(jiān)聽械巡,設置一個timeout,否則造成該部分陷入無止境的等待(即阻塞接收:當進程要接受的內(nèi)容沒有就緒時官还,需要等待而不能繼續(xù)執(zhí)行的一種數(shù)據(jù)接收方式)芹橡。

在Windows下似乎操作比較簡單,直接調(diào)用winsock2.h和ws2_32.lib編程

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Windows<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

#include"stdafx.h"

#include"stdio.h"

#include "winsock2.h"

#pragmacomment(lib, "ws2_32.lib")

設置接收超時為nNetTimeout

可采用如下方法:

intnNetTimeout=2000;

if (SOCKET_ERROR ==setsockopt(serSocket,SOL_SOCKET, SO_RCVTIMEO, (char *)&nNetTimeout,sizeof(int)))

{

printf("Set Ser_RecTIMEO error !\r\n");

}

int ret = recvfrom(serSocket, recvData, 255, 0, (sockaddr*)&remoteAddr, &nAddrLen);if(ret<0)

{

printf("recv timeout! %d\n",ret);//ret = -1

//continue;

break望伦;//一般接收數(shù)據(jù)都在一個while(true)循環(huán)中進行林说,因此當判定一段時間無數(shù)據(jù)接收時,則使用break跳出該while循環(huán)屯伞。進入后續(xù)流程腿箩。

}

設置接收超時成功后,若超時愕掏,返回值為ret =-1

補充linux的實現(xiàn)

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Linux<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

而Linux下則不太一樣度秘,timeout若仍采用int型將沒有效果。

linux下應將timeout類型改成struct timeval饵撑!

注意符號:

struct timevaltimeout={4,0};

//即timeout={4,0};或者timeout.tv_sec=4;timeout.tv_usec=0;

//設置接收超時

//setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout));

setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(structtimeval));

//同樣接收超時后接收返回-1

if((rec_length=recvfrom(sockfd,recbuf,MAXDATASIZE,0,(structsockaddr *)&peer,&addrlen))== -1){

printf("recvtimeout!\n");

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市唆貌,隨后出現(xiàn)的幾起案子滑潘,更是在濱河造成了極大的恐慌,老刑警劉巖锨咙,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件语卤,死亡現(xiàn)場離奇詭異,居然都是意外死亡酪刀,警方通過查閱死者的電腦和手機粹舵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骂倘,“玉大人眼滤,你說我怎么就攤上這事±裕” “怎么了诅需?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵漾唉,是天一觀的道長。 經(jīng)常有香客問我堰塌,道長赵刑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任场刑,我火速辦了婚禮般此,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘牵现。我一直安慰自己铐懊,他們只是感情好,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布施籍。 她就那樣靜靜地躺著居扒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丑慎。 梳的紋絲不亂的頭發(fā)上喜喂,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音竿裂,去河邊找鬼玉吁。 笑死,一個胖子當著我的面吹牛腻异,可吹牛的內(nèi)容都是我干的进副。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼悔常,長吁一口氣:“原來是場噩夢啊……” “哼影斑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起机打,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤矫户,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后残邀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體皆辽,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年芥挣,在試婚紗的時候發(fā)現(xiàn)自己被綠了驱闷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片者娱。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡强重,死狀恐怖牢酵,靈堂內(nèi)的尸體忽然破棺而出惠奸,到底是詐尸還是另有隱情拧晕,我是刑警寧澤蝗茁,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布蝗羊,位于F島的核電站精置,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏娇豫。R本人自食惡果不足惜匙姜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望冯痢。 院中可真熱鬧氮昧,春花似錦、人聲如沸浦楣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽振劳。三九已至椎组,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間历恐,已是汗流浹背寸癌。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弱贼,地道東北人蒸苇。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像吮旅,于是被迫代替她去往敵國和親溪烤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容

  • ### main函數(shù)執(zhí)行之前做了什么?(iOS) & dyld 是Apple 的動態(tài)鏈接器庇勃;在 xnu 內(nèi)核為程...
    天使君閱讀 680評論 0 1
  • Select I/O復用檬嘀,可以調(diào)用系統(tǒng)調(diào)用select和poll!在這兩個系統(tǒng)調(diào)用中的某一個阻塞责嚷,而不是真正的阻塞...
    小葉大孟閱讀 830評論 0 0
  • 1.創(chuàng)建socket套接字 structaddrinfohints, *res =NULL, *aip =NULL...
    andy_tu閱讀 281評論 0 0
  • http協(xié)議封裝的底層分裝的TCP/IP 協(xié)議枪眉,所以直接用tcp/ip調(diào)用的http也是可行的,此方法是整...
    漠北兄弟閱讀 1,381評論 2 6
  • 在進行數(shù)據(jù)連接時候需要進行網(wǎng)絡狀態(tài)判斷 //判斷網(wǎng)絡連接 + (BOOL) isConnectionAvailab...
    眼睛不笑的人閱讀 373評論 0 0