色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

TCP/UDP網絡編程的基礎知識合集3

jf_78858299 ? 來源:百問科技 ? 作者:韋東山 ? 2023-05-18 17:31 ? 次閱讀

4.UDP

UDP沒有傳遞保證機制,如果傳輸中數據丟失,協議不會有任何的檢測或提示。

這樣的好處是傳輸的數據是持續的,此外它是無連接的傳輸,比如實時視頻時,如果采用TCP,中途有一點點數據出錯都會卡住,進行等待,產生延時。加入使用UDP,盡管有少量的丟幀,但數據是實時的。

4.1 UDP流程圖

圖片

4.2 UDP步驟分析

從流程圖可以看出,UDP比TCP的步驟少多了。

  • 服務器端:

a. 創建socket

1    sock_fd = socket(AF_INET, SOCK_DGRAM, 0);//AF_INET:IPV4;SOCK_DGRAM:UDP
2    if (-1 == sock_fd)
3    {
4        fprintf(stderr,"socket error:%s\\n\\a", strerror(errno));
5        exit(1);
6    }

協議族改成SOCK_DGRAM。

b. 設置socket

1    memset(&server_addr, 0, sizeof(struct sockaddr_in));//clear
2    server_addr.sin_family = AF_INET;
3    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//INADDR_ANY:This machine all IP
4    server_addr.sin_port = htons(PORT_NUMBER);

和前面的TCP設置還是一樣的。

c. 綁定socket

1    ret = bind(sock_fd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr));
2    if(-1 == ret)
3    {
4        fprintf(stderr,"bind error:%s\\n\\a", strerror(errno));
5        close(sock_fd);
6        exit(1);
7    }

綁定的操作也沒有變。

d. 接收數據

1    addr_len = sizeof(struct sockaddr);
 2    recv_len = recvfrom(sock_fd, recv_buf, 999, 0, (struct sockaddr *)&server_addr, &addr_len);
 3    if (recv_len <= 0)
 4    {
 5        fprintf(stderr, "recvfrom error:%s\\n\\a", strerror(errno));
 6        close(sock_fd);    
 7        exit(1);
 8    }
 9    else
10    {
11        recv_buf[recv_len] = '\\0';
12        printf("Get msg from client%d: %s\\n", client_num, recv_buf);
13    }

所需要頭文件

#include

#include

函數格式

int recvfrom(int sockfd, char FAR *buf, int len, int flags, struct sockaddr FAR *from, int FAR *fromlen);

函數功能

從套接字上接收一個數據報并保存源地址;

sockfd:標識一個已連接套接字的描述符

buf:接收數據緩沖區

len:接收數據緩沖區長度

flags:調用操作方式,由以下零個或多個組成

flags 說明 recv send
MSG_DONTROUTE 繞過路由表查找
?
MSG_DONTWAIT 僅本操作非阻塞 ? ?
MSG_OOB 發送或接收帶外數據 ? ?
MSG_PEEK 窺看外來消息 ?
MSG_WAITALL 等待所有數據 ?

from:(可選)指針,指向裝有源地址的緩沖區

fromlen:(可選)指針,指向from緩沖區長度值

返回值

若成功,返回讀入的字節數,否則返回0;

e. 關閉

1    close(sock_fd);
2    exit(0);
  • 客戶機端:

a. 創建socket

1    sock_fd = socket(AF_INET, SOCK_DGRAM, 0);//AF_INET:IPV4;SOCK_DGRAM:UDP
2    if (-1 == sock_fd)
3    {
4        fprintf(stderr,"socket error:%s\\n\\a", strerror(errno));
5        exit(1);
6    }

協議族改成SOCK_DGRAM。

b. 設置socket

1    memset(&server_addr, 0, sizeof(struct sockaddr_in));//clear
 2    server_addr.sin_family = AF_INET;
 3    server_addr.sin_port = htons(PORT_NUMBER);
 4    ret = inet_aton(argv[1], &server_addr.sin_addr);
 5    if(0 == ret)
 6    {
 7        fprintf(stderr,"server_ip error.\\n");
 8        close(sock_fd);
 9        exit(1);
10    }

c. 發送數據

1    addr_len = sizeof(struct sockaddr);
2    send_len = sendto(sock_fd, send_buf, strlen(send_buf), 0, (const struct sockaddr *)&server_addr, addr_len);
3    if (send_len <= 0)
4    {
5        fprintf(stderr,"send error:%s\\n\\a", strerror(errno));
6        close(sock_fd);
7        exit(1);
8    }

所需要頭文件

#include

#include

函數格式

int sendto(int sockfd, char FAR *buf, int len, int flags, struct sockaddr FAR *to, int FAR *tolen);

函數功能

向一指定目的地發送數據;

sockfd:一個標識套接字的描述字

buf:發送數據緩沖區

len:發送數據緩沖區長度

flags:調用方式標志位

to:(可選)指針,指向目的的套接字的地址

tolen:目的套接字地址的長度

返回值

若成功,返回發送的字節數,如果連接已中止,返回0,如果發生錯誤,返回-1;

d. 關閉

1    close(sock_fd);
2    exit(0);

UDP傳輸的客戶端少了connect(),原本該在connect()函數里傳入服務器地址相關信息,現在變成了在sendto()里傳入。

4.3 UDP完整代碼

1/*
 2* udp_server.c
 3# Copyright (C) 2017 hceng, 
 9#include 
10#include 
11#include       
12#include 
13#include 
14#include 
15#include 
16#include 
17#include 
18#include 
19#include 
20
21#define PORT_NUMBER 8888
22
23/* socket->bind->recvfrom/sendto->close */
24
25int main(int argc, char **argv)
26{
27    int sock_fd;
28    struct sockaddr_in server_addr;
29    struct sockaddr_in client_addr;
30    int ret;
31    int addr_len;
32    int recv_len;
33    unsigned char recv_buf[1000];
34
35    /* socket */
36    sock_fd = socket(AF_INET, SOCK_DGRAM, 0);//AF_INET:IPV4;SOCK_DGRAM:UDP
37    if (-1 == sock_fd)
38    {
39        fprintf(stderr,"socket error:%s\\n\\a", strerror(errno));
40        exit(1);
41    }
42
43    /* set sockaddr_in parameter*/
44    memset(&server_addr, 0, sizeof(struct sockaddr_in));//clear
45    server_addr.sin_family = AF_INET;
46    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//INADDR_ANY:This machine all IP
47    server_addr.sin_port = htons(PORT_NUMBER);
48
49    /* bind */
50    ret = bind(sock_fd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr));
51    if(-1 == ret)
52    {
53        fprintf(stderr,"bind error:%s\\n\\a", strerror(errno));
54        close(sock_fd);
55        exit(1);
56    }
57
58    while (1)
59    {
60        /* recvfrom */
61        addr_len = sizeof(struct sockaddr);
62        recv_len = recvfrom(sock_fd, recv_buf, 999, 0, (struct sockaddr *)&client_addr, &addr_len);
63        if (recv_len <= 0)
64        {
65            fprintf(stderr, "recvfrom error:%s\\n\\a", strerror(errno));
66            close(sock_fd);    
67            exit(1);
68        }
69        else
70        {
71            recv_buf[recv_len] = '\\0';
72            printf("Get msg from client:%s: %s\\n", inet_ntoa(client_addr.sin_addr), recv_buf);
73        }
74    }            
75
76    /* close */
77    close(sock_fd);
78    exit(0); 
79}
1/*
 2* udp_client.c
 3# Copyright (C) 2017 hceng, 
 9#include 
10#include 
11#include 
12#include 
13#include 
14#include 
15#include 
16#include 
17#include 
18#include 
19
20#define PORT_NUMBER 8888
21
22/* socket->bind->recvfrom/sendto->close */
23int main(int argc, char *argv[])
24{
25    int sock_fd;
26    struct sockaddr_in server_addr;
27    int ret;
28    unsigned char send_buf[1000];
29    int send_len;
30    int addr_len;
31
32    if(argc != 2)
33    {
34        fprintf(stderr, "Usage:%s hostname\\n\\a", argv[0]);
35        exit(1);
36    }
37
38    /* socket */
39    sock_fd = socket(AF_INET, SOCK_DGRAM, 0);//AF_INET:IPV4;SOCK_DGRAM:UDP
40    if (-1 == sock_fd)
41    {
42        fprintf(stderr,"socket error:%s\\n\\a", strerror(errno));
43        exit(1);
44    }
45
46    /* set sockaddr_in parameter*/
47    memset(&server_addr, 0, sizeof(struct sockaddr_in));//clear
48    server_addr.sin_family = AF_INET;
49    server_addr.sin_port = htons(PORT_NUMBER);
50    ret = inet_aton(argv[1], &server_addr.sin_addr);
51    if(0 == ret)
52    {
53        fprintf(stderr,"server_ip error.\\n");
54        close(sock_fd);
55        exit(1);
56    }
57
58    while (1)
59    {
60        if (fgets(send_buf, 999, stdin))
61        {
62            /* sendto */
63            addr_len = sizeof(struct sockaddr);
64            send_len = sendto(sock_fd, send_buf, strlen(send_buf), 0, \\
65(const struct sockaddr *)&server_addr, addr_len);
66            if (send_len <= 0)
67            {
68                fprintf(stderr,"send error:%s\\n\\a", strerror(errno));
69                close(sock_fd);
70                exit(1);
71            }
72        }
73    }
74
75    /* close */
76    close(sock_fd);
77    exit(0);
78}

4.4 測試結果

和前面TCP測試方式一樣,先在Ubuntu主機上交叉編譯服務器端代碼,再在Ubuntu主機上編譯客戶端代碼。

在開發板上運行服務器端代碼,在Ubuntu主機先啟動tmux分屏,再分別運行客戶端代碼。

  • 服務器端

    圖片

  • 客戶機端

    圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1372

    瀏覽量

    79143
  • UDP
    UDP
    +關注

    關注

    0

    文章

    326

    瀏覽量

    33993
  • 網絡通信
    +關注

    關注

    4

    文章

    808

    瀏覽量

    29848
  • 網絡編程
    +關注

    關注

    0

    文章

    72

    瀏覽量

    10085
收藏 人收藏

    評論

    相關推薦

    通信必備知識TCPUDP協議介紹及使用

    TCPUDP是兩個最常用的通訊協議。TCP是面向連接的協議,需要在收發數據前與對方建立可靠的連接,建立連接的過程為3次握手,斷開連接的過程為4次揮手,確保數據傳輸的可靠性。
    的頭像 發表于 03-15 08:19 ?1968次閱讀
    通信必備<b class='flag-5'>知識</b>!<b class='flag-5'>TCP</b>與<b class='flag-5'>UDP</b>協議介紹及使用

    第16章 UDP用戶數據報協議基礎知識

    ) 16.1 初學者重要提示 16.2 UDP基礎知識參考資料 16.3 UDP基礎知識點 16.4 TCP
    發表于 11-02 17:27

    第27章 DNS域名系統基礎知識

    轉最新網絡教程本章節為大家講解DNS(Domain Name System,域名系統),通過前面章節對TCPUDP的學習,需要大家對DNS也有個基礎的認識。(本章的知識點主要整理自
    發表于 11-23 15:50

    網絡協議基礎知識推薦

    目錄一、基礎協議1、網絡分層模型2、協議劃分3、重點解析1)TCP/IP和UDP協議2)HTTP和HTTPS協議3)WS和WSS協議4)SS
    發表于 07-02 06:56

    TCP(IP)協議與網絡編程

    網絡編程基礎知識--TCP(IP)協議與網絡編程
    發表于 09-01 15:01 ?0次下載

    TCP-IP_Socket網絡編程

    網絡編程基礎知識--TCP-IP_Socket網絡編程
    發表于 09-01 15:01 ?0次下載

    TCP協議基礎知識

    TCP 是互聯網核心協議之一,本文介紹它的基礎知識
    的頭像 發表于 10-16 10:29 ?3635次閱讀
    <b class='flag-5'>TCP</b>協議<b class='flag-5'>基礎知識</b>

    udptcp的區別在哪里

    主要介紹udptcp的區別在哪里,以及TCP協議和UDP協議為什么會共存?通常我們在說到網絡編程
    發表于 12-08 14:08 ?8589次閱讀

    TCP UDPSocket調試工具應用程序和GPRS DTU數傳應用的基礎知識合集

    本文檔的主要內容詳細介紹的是TCP UDPSocket調試工具應用程序和GPRS DTU數傳應用的基礎知識合集
    發表于 11-14 17:41 ?13次下載
    <b class='flag-5'>TCP</b> UDPSocket調試工具應用程序和GPRS DTU數傳應用的<b class='flag-5'>基礎知識</b><b class='flag-5'>合集</b>

    tcpudp協議的異同

    UDP 校驗和則是包含 UDP 首部和數據在內的校驗結果。 TCP協議 TCP協議基于網絡層的 IP 協議提供的是有連接、可靠服務,是基于
    的頭像 發表于 11-12 14:45 ?4111次閱讀
    <b class='flag-5'>tcp</b>和<b class='flag-5'>udp</b>協議的異同

    基于Socket的UDPTCP編程解析 1

    TCP(傳輸控制協議)和UDP(用戶數據報協議是網絡體系結TCP/IP模型中傳輸層一層中的兩個不同的通信協議。 TCP:傳輸控制協議,
    的頭像 發表于 05-18 17:22 ?981次閱讀
    基于Socket的<b class='flag-5'>UDP</b>和<b class='flag-5'>TCP</b><b class='flag-5'>編程</b>解析 1

    基于Socket的UDPTCP編程解析 2

    TCP(傳輸控制協議)和UDP(用戶數據報協議是網絡體系結TCP/IP模型中傳輸層一層中的兩個不同的通信協議。 TCP:傳輸控制協議,
    的頭像 發表于 05-18 17:22 ?670次閱讀
    基于Socket的<b class='flag-5'>UDP</b>和<b class='flag-5'>TCP</b><b class='flag-5'>編程</b>解析 2

    TCP/UDP網絡編程基礎知識合集1

    本文主要記錄TCP/UDP網絡編程基礎知識,采用TCP/U
    的頭像 發表于 05-18 17:31 ?721次閱讀

    TCP/UDP網絡編程基礎知識合集2

    本文主要記錄TCP/UDP網絡編程基礎知識,采用TCP/U
    的頭像 發表于 05-18 17:31 ?657次閱讀

    TCPUDP的基本區別

    順序,UDP不保證 UDP應用場景: 面向數據報方式 網絡數據大多為短消息 擁有大量Client 對數據安全性無特殊要求 網絡負擔非常重,但對響應速度要求高
    的頭像 發表于 11-13 15:27 ?4656次閱讀
    <b class='flag-5'>TCP</b>與<b class='flag-5'>UDP</b>的基本區別
    主站蜘蛛池模板: 日本亚洲中文字幕无码区| 亚洲国产AV精品一区二区蜜芽| 日日天干夜夜狠狠爱| 日本视频久久| 97人人超碰国产精品最新蜜芽| no视频在线观看| 久久精视频| 野花日本大全免费观看3中文版| 99re5久久热在线| 恋夜秀场支持安卓版全部视频国产 | 国产成人ae在线观看网站站| 韩国成人理伦片免费播放| 午夜伦yy44880影院| 国产精品第一综合首页| 内射白浆一区二区在线观看| 6080yy 久久 亚洲 日本| 国产精品久久久久无码AV色戒 | 暖暖免费 高清 日本社区中文| 99精品日韩| 欧美一区二区在线观看| 亚洲色综合狠狠综合区| 久草在线福利资站免费视频| 影音先锋av天堂| 美女屁股软件| 亚洲精品午睡沙发系列| 僵尸女av| 手机在线观看毛片| 99re8热视频这在线视频| 女人麻豆国产香蕉久久精品| 擦擦擦在线视频观看| 美女久久久| qvod电影资源| 甜性涩爱dvd| 法国剧丝袜情版h级在线电影| 十次啦中文网| 国产中文字幕乱码免费| 在线看片福利无码网址| 国产亚洲一区二区三区啪| 夜色福利院在线观看免费| 免费亚洲视频在线观看| 国产AV果冻传奇麻豆|