Linux下網(wǎng)絡編程實現(xiàn)UDP,還有大量實例
時間:2018-08-15 來源:未知
【1】概念
【2】程序流程
【3】相關(guān)函數(shù)
1)創(chuàng)建套接字
2)綁定網(wǎng)絡信息結(jié)構(gòu)體
3)接受數(shù)據(jù)
4)發(fā)送數(shù)據(jù)
【4】項目:基于udp 的網(wǎng)絡聊天室
【1】概念
UDP(User Datagram Protocol即用戶數(shù)據(jù)報協(xié)議):面向無連接的,不可靠的,不保證分組順序到達的網(wǎng)絡服務
【2】程序流程
(1)服務器:
創(chuàng)建套接字 socket( )
填充服務器網(wǎng)絡信息結(jié)構(gòu)體 sockaddr_in
將套接字與服務器網(wǎng)絡信息結(jié)構(gòu)體綁定 bind( )
進行通信 recvfrom( )/sendto( )
(2)客戶端:
創(chuàng)建套接字 socket( )
填充服務器網(wǎng)絡信息結(jié)構(gòu)體 sockaddr_in
進行通信 sendto( )/recvfrom( )
使用socket創(chuàng)建sockfd時應使用SOCK_DGRAM 數(shù)據(jù)報套接字 udp
shell指令 nc 選項 服務器的IP地址 端口號(客戶端)加 -u 代表UDP 不加代表TCP
加 -l 代表服務器 不加代表客戶端
模擬的是回聲服務器作用
【3】相關(guān)函數(shù)
1)創(chuàng)建套接字


2)綁定網(wǎng)絡信息結(jié)構(gòu)體



3)接受數(shù)據(jù)


注意:與accept類似,在定義socklen_t addrlen =sizeof(struct sockaddr); 取地址傳參,必須先初始化,在不對len進行初始化時,recvfrom第一次接受的數(shù)據(jù),內(nèi)核處理會根據(jù)當前l(fā)en值即亂碼進行數(shù)據(jù)處理,得到的地址信息結(jié)構(gòu)體數(shù)據(jù)也為亂碼。之后,內(nèi)核知曉地址信息結(jié)構(gòu)體大小,會對len值進行修改,即第二次之后得到的地址信息結(jié)構(gòu)體為正確的。未初始化時,如果變量內(nèi)值為正數(shù),則可以正常輸出,但值不正確,但若變量內(nèi)值為負值,內(nèi)核無法處理,則會直接報錯。
4)發(fā)送數(shù)據(jù)


【4】項目:基于udp 的網(wǎng)絡聊天室
功能:
當有人登陸時,其他在線的人可以收到這個人的登錄信息當有人發(fā)消息時,其他在線用戶可以接受到這個信息當有人退出時,其他人可以收到這個人的退出信息服務器可以發(fā)送系統(tǒng)信息
服務器端:

如何實現(xiàn)端對端的通信:
由服務器通知在線人員,然后客戶端選擇與誰通信
可以在服務器的存儲鏈表中增加一個成員變量,用來標識每一個成員,而后根據(jù)客戶端的選擇進行通信在服務器發(fā)送消息的功能中,首先判斷客戶端是發(fā)送單聊或是群聊
服務器:







