當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 學(xué)習(xí)筆記 > Linux下網(wǎng)絡(luò)編程實現(xiàn)UDP,還有大量實例
【1】概念
【2】程序流程
【3】相關(guān)函數(shù)
1)創(chuàng)建套接字
2)綁定網(wǎng)絡(luò)信息結(jié)構(gòu)體
3)接受數(shù)據(jù)
4)發(fā)送數(shù)據(jù)
【4】項目:基于udp 的網(wǎng)絡(luò)聊天室
【1】概念
UDP(User Datagram Protocol即用戶數(shù)據(jù)報協(xié)議):面向無連接的,不可靠的,不保證分組順序到達(dá)的網(wǎng)絡(luò)服務(wù)
【2】程序流程
(1)服務(wù)器:
創(chuàng)建套接字 socket( )
填充服務(wù)器網(wǎng)絡(luò)信息結(jié)構(gòu)體 sockaddr_in
將套接字與服務(wù)器網(wǎng)絡(luò)信息結(jié)構(gòu)體綁定 bind( )
進行通信 recvfrom( )/sendto( )
(2)客戶端:
創(chuàng)建套接字 socket( )
填充服務(wù)器網(wǎng)絡(luò)信息結(jié)構(gòu)體 sockaddr_in
進行通信 sendto( )/recvfrom( )
使用socket創(chuàng)建sockfd時應(yīng)使用SOCK_DGRAM 數(shù)據(jù)報套接字 udp
shell指令 nc 選項 服務(wù)器的IP地址 端口號(客戶端)加 -u 代表UDP 不加代表TCP
加 -l 代表服務(wù)器 不加代表客戶端
模擬的是回聲服務(wù)器作用
【3】相關(guān)函數(shù)
1)創(chuàng)建套接字
2)綁定網(wǎng)絡(luò)信息結(jié)構(gòu)體
3)接受數(shù)據(jù)
注意:與accept類似,在定義socklen_t addrlen =sizeof(struct sockaddr); 取地址傳參,必須先初始化,在不對len進行初始化時,recvfrom第一次接受的數(shù)據(jù),內(nèi)核處理會根據(jù)當(dāng)前l(fā)en值即亂碼進行數(shù)據(jù)處理,得到的地址信息結(jié)構(gòu)體數(shù)據(jù)也為亂碼。之后,內(nèi)核知曉地址信息結(jié)構(gòu)體大小,會對len值進行修改,即第二次之后得到的地址信息結(jié)構(gòu)體為正確的。未初始化時,如果變量內(nèi)值為正數(shù),則可以正常輸出,但值不正確,但若變量內(nèi)值為負(fù)值,內(nèi)核無法處理,則會直接報錯。
4)發(fā)送數(shù)據(jù)
【4】項目:基于udp 的網(wǎng)絡(luò)聊天室
功能:
當(dāng)有人登陸時,其他在線的人可以收到這個人的登錄信息當(dāng)有人發(fā)消息時,其他在線用戶可以接受到這個信息當(dāng)有人退出時,其他人可以收到這個人的退出信息服務(wù)器可以發(fā)送系統(tǒng)信息
服務(wù)器端:
如何實現(xiàn)端對端的通信:
由服務(wù)器通知在線人員,然后客戶端選擇與誰通信
可以在服務(wù)器的存儲鏈表中增加一個成員變量,用來標(biāo)識每一個成員,而后根據(jù)客戶端的選擇進行通信在服務(wù)器發(fā)送消息的功能中,首先判斷客戶端是發(fā)送單聊或是群聊
服務(wù)器: