UDP斷線重連(自學)

2021-04-22 18:56:42 字數 1614 閱讀 4251

在一家小公司,任務也不多,主管也沒教,好不容易來了乙個socket斷線重連的任務,於是自己寫了一下。寫的很爛,希望多多包涵,我是個新手,才剛剛上路,希望大家多多指教。

公司的硬體是乙個可以gsm傳資料的盒子,通過socket把資料傳到遠端伺服器,主管寫了程式,斷線重連的功能教給我完成。這是我的第乙個程式。

#include 

#include

void *subthread();

main()

void *subthread()

fcntl(sd, f_setfl, o_nonblock);//set up to nonblock.

perror("fcntl");

h = (struct hostent *) gethostbyname((char *)"61...28");

remoteservaddr.sin_family = af_inet;

remoteservaddr.sin_port = htons(9999);

remoteservaddr.sin_addr.s_addr = inet_addr(serv_addr);

bzero(&(remoteservaddr.sin_zero),8);

rc = sendto(sd, sendbuf, sumlen+2, 0,(struct sockaddr *) &remoteservaddr,sizeof(remoteservaddr));

if(rc<0)

timeout.tv_sec = sendstruct->rtimeout;

timeout.tv_usec = 0;

fd_zero(&fdr);

fd_set(sd, &fdr);

switch (select(sd + 1, &fdr, null,null, &timeout))

case 0:

break;

}default:

if (fd_isset(sd,&fdr))

}//switch*/

}框架在這裡,我原想著只是重新建立乙個socket就可以了,但是遠遠不是這樣,首先要埠復用。然後原來的socket被close掉了以後,我新建的socket控制代碼還是和原來的socket控制代碼一樣,都是5.在短時間內重新連是連不上的。而我的盒子要求長連線和短時間迅速重連。我在乙個時間只有乙個socket,這不能達到要求。於是我做出了如下的修改。

#include

#include

main()

void *subthread()

else

vv = close(sd);

sd = sa;//change socket id; }}

首先新建乙個socket,然後再關掉原來的socket,這樣socket id就不會重複,socket id 在5和6之間切換,可以讓2msl變成1msl。而且只使用1個socket進行通訊。

寫的不好,因為實在是不知道udp的斷線重連應該怎麼連,這裡要求的是斷線要立刻連線上,以免資料丟失,而且連線上了就是很長時間,因為是嵌入式環境。

寫完了程式,中國部這邊就不寫code了,公司真是小啊。我的程式也沒人去看了。但是我會繼續學習網路程式設計,我的目標是tiro,我想以後也投身協議,投身ic設計中去。我還要努力。謝謝。

websocket 斷線重連

摘要websocket reconnect websocket是html5發布之後出現的一種新技術,說它是新技術,其實也不是多新的技術了,因為畢竟也有2 3年了,但是找了很多國內的例項,缺發現不多,不知道是它不好用呢,還是說這種技術原來就有缺陷呢,咱們暫且不說,今天我們就來介紹一下websocket...

斷線重連機制

zookeeper的客戶端具有自動重連機制,當出現網路異常時,客戶端會自動重連直到與集群中的某台機器連線成功,連線過程如下圖所示 1.網路異常情況包括網路閃斷 zk伺服器宕機等情況,這會導致連線斷開connection loss,此時客戶端會收到事件none disconnected 2.如果在se...

TCP斷線重連

struct sockaddr in tempsadd tempsadd.sin family af inet tempsadd.sin port htons m serverport tempsadd.sin addr.s addr inet addr m serverip.c str if 1 ...