国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

網(wǎng)絡(luò)編程——UDP編程

這篇具有很好參考價(jià)值的文章主要介紹了網(wǎng)絡(luò)編程——UDP編程。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

UDP編程步驟

網(wǎng)絡(luò)編程——UDP編程
在C語言中進(jìn)行UDP編程的一般步驟如下:

(1)包含頭文件
在代碼中包含必要的頭文件,以便使用UDP編程所需的函數(shù)和數(shù)據(jù)類型。通常情況下,你需要包含 <sys/socket.h>、<netinet/in.h> 和 <arpa/inet.h>。

(2)創(chuàng)建套接字
使用 socket() 函數(shù)創(chuàng)建一個(gè)套接字,該套接字將用于網(wǎng)絡(luò)通信。套接字是一個(gè)整數(shù)值,它表示一個(gè)打開的文件描述符,用于在網(wǎng)絡(luò)上發(fā)送和接收數(shù)據(jù)。

(3)設(shè)置地址和端口
創(chuàng)建一個(gè) struct sockaddr_in 結(jié)構(gòu)體,并設(shè)置其中的成員變量,包括地址和端口號(hào)。這個(gè)結(jié)構(gòu)體用于指定服務(wù)器的地址和端口。

(4)綁定套接字
使用 bind() 函數(shù)將套接字綁定到指定的地址和端口上。這將使服務(wù)器能夠接收通過該地址和端口發(fā)送的UDP數(shù)據(jù)報(bào)。

(5)接收數(shù)據(jù)
使用 recvfrom() 函數(shù)從綁定的套接字接收數(shù)據(jù)報(bào)。該函數(shù)將阻塞等待,直到接收到數(shù)據(jù)報(bào)為止。

(6)發(fā)送數(shù)據(jù)
使用 sendto() 函數(shù)向特定的目標(biāo)地址發(fā)送數(shù)據(jù)報(bào)。該函數(shù)需要指定目標(biāo)地址和端口,以及要發(fā)送的數(shù)據(jù)。

(7)關(guān)閉套接字
在通信結(jié)束后,使用 close() 函數(shù)關(guān)閉套接字,釋放資源。

這些步驟提供了一個(gè)基本的框架來進(jìn)行UDP編程。你可以根據(jù)需要進(jìn)行適當(dāng)?shù)男薷暮蛿U(kuò)展。同時(shí)還需要處理錯(cuò)誤和異常情況,并確保適當(dāng)?shù)蒯尫刨Y源,以避免內(nèi)存泄漏和其他問題。請(qǐng)注意,UDP是面向無連接的協(xié)議,因此不需要像TCP那樣建立連接和維護(hù)狀態(tài)。每個(gè)UDP數(shù)據(jù)報(bào)都是獨(dú)立的,它們可以單獨(dú)發(fā)送和接收。
網(wǎng)絡(luò)編程——UDP編程

通信流程

server

(1)創(chuàng)建數(shù)據(jù)報(bào)套接字(socket(,SOCK_DGRAM,))
(2)綁定網(wǎng)絡(luò)信息(bind())
(3)接收信息(recvfrom())
(4)關(guān)閉套接字(close())

client

(1)創(chuàng)建數(shù)據(jù)報(bào)套接字(socket())
(2)指定服務(wù)器的網(wǎng)絡(luò)信息
(3)發(fā)送信息(sendto())
(4)關(guān)閉套接字(close())文章來源地址http://www.zghlxwxcb.cn/news/detail-446254.html

函數(shù)接口

socket

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
int socket(int domain,int type,int protocol);
 功能:創(chuàng)建套接字文件  
 參數(shù):
     domain:協(xié)議族 ,選擇通信方式
        AF_UNIX, AF_LOCAL   本地通信
	AF_INET             IPv4 
	AF_INET6            IPv6  
    type:通信協(xié)議-套接字類型
	SOCK_STREAM   流式套接字
	SOCK_DGRAM    數(shù)據(jù)報(bào)套接字
	SOCK_RAW      原始套接字
    protocol:協(xié)議  填0,自動(dòng)匹配底層TCP或UDP等協(xié)議。根據(jù)type匹配系統(tǒng)默認(rèn)自動(dòng)幫助匹配對(duì)應(yīng)協(xié)議
     傳輸層:IPPROTO_TCP、IPPROTO_UDP、IPPROTO_ICMP
     網(wǎng)絡(luò)層:htons(ETH_P_IP|ETH_P_ARP|ETH_P_ALL)

返回值:成功。返回同于鏈接的文件描述符
       失敗 -1,更新errno

bind

```c
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
int bind(int sockfd,const struct sockaddr* addr,socklen_t addrlen);
 功能:綁定套接字 - ip和端口
 功能:
   sockfd:套接字文件描述符
   addr:用于通信結(jié)構(gòu)體 (提供的是通用結(jié)構(gòu)體,需要根據(jù)選擇通信方式,填充對(duì)應(yīng)結(jié)構(gòu)體-通信結(jié)構(gòu)體由socket第一個(gè)參數(shù)確定)

  addrlen:結(jié)構(gòu)體大小
返回值: 成功0
      失敗:-1 更新errno

 通用結(jié)構(gòu)體:  
struct sockaddr{
	sa_family_t sa_family;
	char        sa_data[14];
}

 ipv4的通信結(jié)構(gòu)體:
struct sockaddr_in{
	sa_family_t    sin_family;/*AF_INET */
	in_port_t      sin_port;/* 端口 */
	struct in_addr sin_addr;/* ip地址 */
};
struct in_addr{
	uint32_t       s_addr;
};

本地通信結(jié)構(gòu)體:
struct sockaddr_un{
	sa_family_t sun_family;/* AF_UNIX */
	char        sun_path[108];/* 套接字文件 */
};

recvfrom

ssize_t recvfrom(int sockfd,void*buf,size_t len,int flags,
					struct sockaddr * src_addr,socklen_t * addrlen);
功能:接收數(shù)據(jù)

參數(shù):
	sockfd:套接字描述符
	buf:接收緩存區(qū)的首地址
	len:接收緩存區(qū)的大小
	flags:0//調(diào)用方式標(biāo)志位
	src_addr:發(fā)送端的網(wǎng)絡(luò)信息結(jié)構(gòu)體的指針
	addrlen:發(fā)送端的網(wǎng)絡(luò)信息結(jié)構(gòu)體的大小的指針

返回值:
	成功接收的字節(jié)個(gè)數(shù)
	失?。?span id="n5n3t3z"    class="token operator">-1
	0:客戶端退出

sendto

ssize_t sendto(int sockfd,constvoid*buf,size_t len,int flags,
const struct sockaddr* dest_addr,socklen_t addrlen);
功能:發(fā)送數(shù)據(jù)

參數(shù):
	sockfd:套接字描述符
	buf:發(fā)送緩存區(qū)的首地址
	len:發(fā)送緩存區(qū)的大小
	flags:0
	src_addr:接收端的網(wǎng)絡(luò)信息結(jié)構(gòu)體的指針
	addrlen:接收端的網(wǎng)絡(luò)信息結(jié)構(gòu)體的大小

返回值: 
	成功發(fā)送的字節(jié)個(gè)數(shù)
	失?。?span id="n5n3t3z"    class="token operator">-1

舉例

UDP客戶端

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define MAX_BUFFER_SIZE 1024
#define SERVER_IP "127.0.0.1"
#define SERVER_PORT 8888

int main() {
    int sockfd;
    struct sockaddr_in server_addr;
    char buffer[MAX_BUFFER_SIZE];

    // 創(chuàng)建UDP套接字
    if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        perror("socket creation failed");
        exit(EXIT_FAILURE);
    }

    memset(&server_addr, 0, sizeof(server_addr));

    // 設(shè)置服務(wù)器地址和端口
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
    server_addr.sin_port = htons(SERVER_PORT);

    // 從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù)
    printf("Enter message: ");
    fgets(buffer, MAX_BUFFER_SIZE, stdin);

    // 發(fā)送數(shù)據(jù)到服務(wù)器
    sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr*)&server_addr, sizeof(server_addr));

    // 等待接收服務(wù)器的響應(yīng)
    memset(buffer, 0, sizeof(buffer));
    recvfrom(sockfd, buffer, sizeof(buffer), 0, NULL, NULL);

    // 打印服務(wù)器的響應(yīng)
    printf("Server response: %s\n", buffer);

    // 關(guān)閉套接字
    close(sockfd);

    return 0;
}

UDP服務(wù)器

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>

#define MAX_BUFFER_SIZE 1024
#define SERVER_PORT 8888

int main() {
    int sockfd;
    struct sockaddr_in server_addr, client_addr;
    char buffer[MAX_BUFFER_SIZE];

    // 創(chuàng)建UDP套接字
    if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        perror("socket creation failed");
        exit(EXIT_FAILURE);
    }

    memset(&server_addr, 0, sizeof(server_addr));
    memset(&client_addr, 0, sizeof(client_addr));

    // 設(shè)置服務(wù)器地址和端口
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = INADDR_ANY;
    server_addr.sin_port = htons(SERVER_PORT);

    // 綁定服務(wù)器地址和端口
    if (bind(sockfd, (const struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }

    printf("Server running on port %d...\n", SERVER_PORT);

    while (1) {
        // 接收來自客戶端的數(shù)據(jù)
        memset(buffer, 0, sizeof(buffer));
        socklen_t client_len = sizeof(client_addr);
        ssize_t message_size = recvfrom(sockfd, buffer, sizeof(buffer) - 1, 0, (struct sockaddr*)&client_addr, &client_len);
        if (message_size < 0) {
            perror("recvfrom failed");
            exit(EXIT_FAILURE);
        }

        // 打印客戶端發(fā)送的數(shù)據(jù)
        printf("Client message: %s\n", buffer);

        // 向客戶端發(fā)送響應(yīng)
        if (sendto(sockfd, buffer, message_size, 0, (struct sockaddr*)&client_addr, sizeof(client_addr)) < 0) {
            perror("sendto failed");
            exit(EXIT_FAILURE);
        }
    }
    
    // 關(guān)閉套接字
    close(sockfd);

    return 0;
}


到了這里,關(guān)于網(wǎng)絡(luò)編程——UDP編程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 網(wǎng)絡(luò)編程 —— TCP 和 UDP 編程詳解

    網(wǎng)絡(luò)編程 —— TCP 和 UDP 編程詳解

    目錄 網(wǎng)絡(luò)編程主要函數(shù)介紹 1. socket 函數(shù) 2. bind 函數(shù) 3. listen 函數(shù) 4. accept 函數(shù) 5. connect 函數(shù) 6. send 函數(shù) 7. recv 函數(shù) 8. recvfrom 函數(shù) 9. sendto 函數(shù) TCP 和 UDP 原理上的區(qū)別 TCP 編程 服務(wù)端代碼: 客戶端代碼: UDP 編程 服務(wù)端代碼: 客戶端代碼: 1. socket 函數(shù) int socket(int domain, int

    2024年02月04日
    瀏覽(18)
  • UDP網(wǎng)絡(luò)編程

    UDP網(wǎng)絡(luò)編程

    1.1、UDP——面向無連接(無連接,是因?yàn)閁DP里有了對(duì)方的地址,直接發(fā)就好) 特點(diǎn): ? ? ? ? ? 1、郵件系統(tǒng)服務(wù)模式的抽象 ? ? ? ? ? 2、每個(gè)分組都攜帶完整的目的地址 ? ? ? ? ? 3、不能保證分組的先后順序 ? ? ? ? ? 4、不進(jìn)行分組出錯(cuò)的恢復(fù)和重傳 ? ? ? ? ? 5、不

    2024年02月12日
    瀏覽(17)
  • 網(wǎng)絡(luò)編程 tcp udp http編程流程 網(wǎng)絡(luò)基礎(chǔ)知識(shí)

    網(wǎng)絡(luò)編程 tcp udp http編程流程 網(wǎng)絡(luò)基礎(chǔ)知識(shí)

    OSI分層:應(yīng)用層 表示層 會(huì)話層 傳輸層 網(wǎng)絡(luò)層 數(shù)據(jù)鏈路層 物理層 tcp/ip: 應(yīng)用層 傳輸層 網(wǎng)絡(luò)層 數(shù)據(jù)鏈路 ip地址:唯一標(biāo)識(shí)一臺(tái)主機(jī) ipv4 32位 ipv6 128位 尋址 可以反映物理上的一個(gè)變化 MAC地址:48 固化在計(jì)算機(jī)中 ip地址又兩部分構(gòu)成:網(wǎng)絡(luò)號(hào)+主機(jī)號(hào) 端口號(hào):標(biāo)識(shí)一個(gè)應(yīng)用程序

    2024年02月13日
    瀏覽(39)
  • 【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程概念,socket套接字,基于UDP和TCP的網(wǎng)絡(luò)編程

    【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程概念,socket套接字,基于UDP和TCP的網(wǎng)絡(luò)編程

    前言: 大家好,我是 良辰丫 ,今天我們一起來學(xué)習(xí)網(wǎng)絡(luò)編程,網(wǎng)絡(luò)編程的基本概念,認(rèn)識(shí)套接字,UDP與TCP編程.?????? ??個(gè)人主頁:良辰針不戳 ??所屬專欄:javaEE初階 ??勵(lì)志語句:生活也許會(huì)讓我們遍體鱗傷,但最終這些傷口會(huì)成為我們一輩子的財(cái)富。 ??期待大家三連,關(guān)注

    2023年04月20日
    瀏覽(85)
  • JavaEE——網(wǎng)絡(luò)編程(UDP套接字編程)

    JavaEE——網(wǎng)絡(luò)編程(UDP套接字編程)

    概念: Socket 套接字就是操作系統(tǒng)給應(yīng)用程序提供的網(wǎng)絡(luò)編程 API。 我們可以認(rèn)為 socket api 是和 傳輸層 密切相關(guān)的。 我們知道,在傳輸層中,提供了兩個(gè)最核心的協(xié)議,UDP TCP。 因此,socket api 中也提供了兩種風(fēng)格。UDP TCP。 在這里我們簡(jiǎn)單認(rèn)識(shí)一下 UDP 和 TCP : UDP : 無連接

    2024年02月13日
    瀏覽(94)
  • Java網(wǎng)絡(luò)編程——UDP

    目錄 UDP網(wǎng)絡(luò)通信編程 基本介紹 UDP編程的基本流程 應(yīng)用實(shí)例 本章習(xí)題 第一題 服務(wù)端 客戶端 第二題 服務(wù)端 客戶端 基本介紹 UDP(User Datagram Protocol)是一種無連接的傳輸協(xié)議,不保證傳輸數(shù)據(jù)的可靠性。在網(wǎng)絡(luò)通信中,UDP常用于那些對(duì)實(shí)時(shí)性要求較高、可靠性要求較低的應(yīng)

    2024年02月06日
    瀏覽(17)
  • 網(wǎng)絡(luò)編程、UDP、TCP

    網(wǎng)絡(luò)編程、UDP、TCP

    就是將地理位置不同的具有獨(dú)立功能的多臺(tái)計(jì)算及外部設(shè)備,通過通信線路連接起來,在網(wǎng)絡(luò)操作系統(tǒng)、網(wǎng)絡(luò)管理軟件以及網(wǎng)絡(luò)通信協(xié)議的管理和協(xié)調(diào)下,實(shí)現(xiàn)資源共享和信息傳遞的計(jì)算機(jī)系統(tǒng) 傳播交流信息、數(shù)據(jù)交換、通信 1.如何準(zhǔn)確定位網(wǎng)絡(luò)上的一臺(tái)主機(jī) 192.xxx.xx.xx:端

    2024年03月10日
    瀏覽(37)
  • Qt - UDP網(wǎng)絡(luò)編程

    Qt - UDP網(wǎng)絡(luò)編程

    UDP(User Datagram Protocol,用戶數(shù)據(jù)報(bào)協(xié)議) UDP是一個(gè)輕量級(jí)、不可靠、面向數(shù)據(jù)報(bào)的、無連接的協(xié)議,多用于可靠性要求不嚴(yán)格,不是非常重要的傳輸。 QUdpSocket類繼承自QAbstractSocket,用來發(fā)送和接收UDP數(shù)據(jù)報(bào),”Socket”即套接字,套接字即IP地址+端口號(hào)。其中IP地址指定了網(wǎng)絡(luò)

    2024年04月22日
    瀏覽(22)
  • 網(wǎng)絡(luò)中UDP編程

    ? ? ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, ? ? ? ? ? ? ? ? ? ? ? ? struct sockaddr *src_addr, socklen_t *addrlen); ? ? 功能: ? ? ? ? 從套接字中接收數(shù)據(jù) ? ? 參數(shù): ? ? ? ? sockfd:套接字文件描述符 ? ? ? ? buf:存放數(shù)據(jù)空間首地址 ? ? ? ? flags:屬性 默認(rèn)為0? ? ? ? ? s

    2024年03月21日
    瀏覽(14)
  • 第16章_網(wǎng)絡(luò)編程拓展練習(xí)(TCP編程,UDP編程)

    第16章_網(wǎng)絡(luò)編程拓展練習(xí)(TCP編程,UDP編程)

    1、學(xué)生與老師交互 案例:客戶端模擬學(xué)生咨詢,服務(wù)器端模擬咨詢老師,進(jìn)行交互。 客戶端收到信息: ? 歡迎咨詢尚硅谷! ? 這個(gè)月的所有期班都已經(jīng)滿了,只能報(bào)下一個(gè)月的了! 服務(wù)器端收到信息: ? 你好,我想報(bào)名這個(gè)月的JavaEE就業(yè)班! ? 好的,趕緊給我占個(gè)座

    2024年01月20日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包