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