在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

Linux下TCP網絡編程-創建服務器與客戶端

DS小龍哥-嵌入式技術 ? 來源:DS小龍哥-嵌入式技術 ? 作者:DS小龍哥-嵌入式技 ? 2022-08-14 09:26 ? 次閱讀

一、前言

互聯網概念誕生于20世紀60年代末,從9幾年中國接入互聯網開始到現在,生活的每個角落都能看到網絡的使用。現在物聯網時代、共享經濟的到來,生活中不僅僅電腦手機可以接入網絡,身邊的各個設備也能接入互聯網了。 比如:市政路燈、污水井蓋、家用電器,汽車等等。

這篇文章介紹在Linux下的socket編程,完成TCP服務器、客戶端的創建,實現數據通信

二、TCP協議介紹

在Linux應用層做編程,接觸到是傳輸層協議,TCP/UDP,如果搞Linux網絡驅動開發(網卡驅動),那么底層的網絡協議就會接觸的更多,協議只是一個數據格式的約定而已,自己也可以設計自己的協議。

下面這張圖介紹兩個設備通過網絡通信的一個大致流程:

image-20211202132822244

TCP協議是點對點傳輸協議。TCP協議屬于C/S模型。
TCP協議里包含服務器和客戶端。
服務器必須要比客戶端先存在,客戶端必須連接服務器,服務器必須被客戶端連接。
接下來學習主要學習TCP服務器創建和TCP客戶端創建,完成客戶端與服務器之間的通信。
TCP服務器可以被多個客戶端連接。

image-20211202132933733

Linux下socket編程需要用到的相關函數:

#include           /* See NOTES */
#include 

int socket(int domain, int type, int protocol);
AF_UNIX, AF_LOCAL   Local communication              unix(7)
AF_INET             IPv4 Internet protocols          ip(7)
AF_INET6            IPv6 Internet protocols          ipv6(7)
AF_IPX              IPX - Novell protocols
AF_NETLINK          Kernel user interface device     netlink(7)
AF_X25              ITU-T X.25 / ISO-8208 protocol   x25(7)
AF_AX25             Amateur radio AX.25 protocol
AF_ATMPVC           Access to raw ATM PVCs
AF_APPLETALK        AppleTalk                        ddp(7)
AF_PACKET           Low level packet interface       packet(7)
AF_ALG              Interface to kernel crypto API

#include           /* See NOTES */
#include 
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
struct sockaddr {
   sa_family_t sa_family;
   char        sa_data[14];
}

#include           /* See NOTES */
#include 

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

#define _GNU_SOURCE             /* See feature_test_macros(7) */
#include 
int accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags);

#include           /* See NOTES */
#include 
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

三、案例代碼

3.1 創建TCP服務器

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

/*
TCP服務器創建步驟:
1. 創建socket套接字(類似于open打開文件一樣)
2. 綁定端口號和IP地址
3. 設置監聽等待隊列的數量
4. 等待客戶端連接
5. 完成正常數據收發

0x1234
192.168.1.123
255.255.255.255
*/
int main(int argc,char **argv)
{   
    if(argc!=2)
    {
        printf("./app <端口號>\n");
        return 0;
    }
    int sockfd;
    /*1. 創建socket套接字*/
    sockfd=socket(AF_INET,SOCK_STREAM,0);
    /*2. 綁定端口號與IP地址*/
    struct sockaddr_in addr;
    addr.sin_family=AF_INET;
    addr.sin_port=htons(atoi(argv[1])); // 端口號0~65535
    addr.sin_addr.s_addr=INADDR_ANY;    //inet_addr("0.0.0.0"); //IP地址
    if(bind(sockfd,(const struct sockaddr *)&addr,sizeof(struct sockaddr))!=0)
    {
        printf("服務器:端口號綁定失敗.\n");
    }
    /*3. 設置監聽的數量*/
    listen(sockfd,20);
    /*4. 等待客戶端連接*/
    int client_fd;
    struct sockaddr_in client_addr;
    socklen_t addrlen=sizeof(struct sockaddr_in);
    client_fd=accept(sockfd, (struct sockaddr *)&client_addr,&addrlen);
    if(client_fd<0)
    {
        printf("客戶端連接失敗.\n");
        return 0;
    }
    printf("連接的客戶端IP地址:%s\n",inet_ntoa(client_addr.sin_addr));
    printf("連接的客戶端端口號:%d\n",ntohs(client_addr.sin_port));
    /*5. 完成通信*/
    write(client_fd,"1234567890",10);
    /*6. 關閉連接*/
    close(client_fd);
    close(sockfd);
    return 0;
}

3.2 創建TCP客戶端

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

/*
TCP客戶端創建步驟:
1. 創建socket套接字(類似于open打開文件一樣)
2. 連接服務器 
3. 完成正常數據收發

*/
int main(int argc,char **argv)
{   
    if(argc!=3)
    {
        printf("./app   <端口號>\n");
        return 0;
    }
    int sockfd;
    /*1. 創建socket套接字*/
    sockfd=socket(AF_INET,SOCK_STREAM,0);
    /*2. 連接服務器*/
    struct sockaddr_in addr;
    addr.sin_family=AF_INET;
    addr.sin_port=htons(atoi(argv[2])); // 端口號0~65535
    addr.sin_addr.s_addr=inet_addr(argv[1]); //IP地址
    if(connect(sockfd,(const struct sockaddr *)&addr,sizeof(struct sockaddr_in))!=0)
    {
        printf("客戶端:服務器連接失敗.\n");
        return 0;
    }
    /*3. 完成數據通信*/
    char buff[1024];
    int cnt;
    cnt=read(sockfd,buff,1024);
    buff[cnt]='\0';
    printf("客戶端收到的數據:%s,%d\n",buff,cnt);
    
    close(sockfd);
    return 0;
}

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

    關注

    87

    文章

    11479

    瀏覽量

    213026
  • 服務器
    +關注

    關注

    13

    文章

    9728

    瀏覽量

    87438
  • 網絡編程
    +關注

    關注

    0

    文章

    72

    瀏覽量

    10558
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    Linux網絡編程-TCP客戶端如何獲取要連接的服務端IP?

    本篇介紹了在TCP通信中,客戶端通過UDP廣播,實現自動獲取服務端的IP地址,并進行TCP連接的具體方法,并通過代碼實現,來測試此方案是實際效果,為了使
    的頭像 發表于 09-27 08:56 ?5388次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>網絡</b><b class='flag-5'>編程</b>-<b class='flag-5'>TCP</b><b class='flag-5'>客戶端</b>如何獲取要連接的<b class='flag-5'>服務端</b>IP?

    如果ESP上的TCP客戶端服務器斷開連接,如何啟用自動重連?

    ESP - TCP 客戶端 嵌入式 Linux 服務器 - TCP 服務器 如果ESP上的
    發表于 07-17 06:25

    labview TCP客戶端

    最近在做一個labview 客戶端測試小程序,服務器采用MFC編寫,客戶端采用TCP偵聽函數,通信可以連接,數據也正確,但是服務器端檢測發送
    發表于 06-30 23:15

    uip協議網絡客戶端設備與linux網絡服務器設備直連tcp無法連接

    uip協議網絡客戶端設備與linux網絡服務器設備直連tcp無法連接,通過HUB就可以正常連接,uip設備與PC直連也能正常連接,找不到問題
    發表于 12-04 08:55

    labview-TCP客戶端服務器

    labview-TCP客戶端服務器一個服務器上位機,多個下位機客戶端
    發表于 03-26 16:58

    不能打開TCP客戶端服務器

    您好,我使用PrimeV2.0和MPLAB V3.5與PIC32 MX795F512,我不能打開TCP客戶端服務器。我使用的是協調函數TCPIPpTCPPclitOnTune
    發表于 04-30 13:24

    如何協調TCP/IP服務器以訪問多個客戶端

    服務器。我的代碼是附加的。我的代碼打開允許3個TCP連接,但打印您好!在關閉連接之前每次連接兩次。我相信有更好的方法來建立數據結構來接受多個客戶端連接,但我不知所措。任何方向或幫助將不勝感激。
    發表于 04-27 07:34

    4412開發板Qt網絡編程-TCP實現服務器客戶端

    網絡編程TCP 和 UDP,TCP 編程需要用到倆個類:QTcpServer 和 QTcpSocket。1
    發表于 04-28 15:33

    TCP服務器創建過程

    用過正點原子LWIP服務器例程開發的朋友可能知道,例程的設計是只支持一個客戶端連接的,但實際應用中往往需要用到多客戶端連接。下面是在正點原子擴展例程網絡實驗14 NETCONN_
    發表于 08-24 08:03

    Labview TCP服務器和多個客戶端問題

    我開啟一個Labview TCP服務器,與外部兩個TCP客戶端連接,兩個客戶端會定時給服務端發送
    發表于 04-13 18:43

    如何創建客戶端將連接到服務器的網狀網絡

    的問題是:如何創建客戶端將連接到服務器的網狀網絡(或者服務器將多次提供與網狀的連接)有任何想法嗎?我錯過了什么?是否有應該唯一的
    發表于 03-02 07:54

    網絡調試和串口調試集合UDP TCP客戶端TCP服務器端應用程序免費下載

    本文檔的主要內容詳細介紹的是網絡調試和串口調試集合UDP TCP客戶端TCP服務器端應用程序免費下載。
    發表于 08-30 08:00 ?16次下載
    <b class='flag-5'>網絡</b>調試和串口調試集合UDP <b class='flag-5'>TCP</b><b class='flag-5'>客戶端</b>和<b class='flag-5'>TCP</b><b class='flag-5'>服務器端</b>應用程序免費下載

    Linux網絡編程TCP并發服務器TCP客戶端程序免費下載

    本文檔的主要內容詳細介紹的是Linux網絡編程TCP并發服務器TCP
    發表于 01-08 15:12 ?9次下載
    <b class='flag-5'>Linux</b>下<b class='flag-5'>網絡</b><b class='flag-5'>編程</b><b class='flag-5'>TCP</b>并發<b class='flag-5'>服務器</b>和<b class='flag-5'>TCP</b><b class='flag-5'>客戶端</b>程序免費下載

    STM32+LWIP服務器實現多客戶端連接

    用過正點原子LWIP服務器例程開發的朋友可能知道,例程的設計是只支持一個客戶端連接的,但實際應用中往往需要用到多客戶端連接。下面是在正點原子擴展例程 網絡實驗14 NETCONN_
    發表于 12-23 19:59 ?65次下載
    STM32+LWIP<b class='flag-5'>服務器</b>實現多<b class='flag-5'>客戶端</b>連接

    服務器Server和客戶端Client的區別

    例如在使用TCP通訊建立連接時采用客戶端服務器模式,這種模式又常常被稱為主從式架構,簡稱為C/S結構,屬于一種網絡通訊架構,將通訊的雙方以客戶端
    的頭像 發表于 09-06 16:13 ?1870次閱讀
    <b class='flag-5'>服務器</b>Server和<b class='flag-5'>客戶端</b>Client的區別
    主站蜘蛛池模板: 欧美成人免费全部观看天天性色 | 91亚色视频在线观看 | sihu国产午夜精品一区二区三区 | 天天射天天干天天操 | 牛牛a级毛片在线播放 | 1024手机在线观看视频 | 免费观看黄a一级视频日本 免费观看黄色网页 | 日韩啪啪片 | 亚洲日本免费 | 亚洲国产综合久久精品 | 国产自产视频在线观看香蕉 | 伊人久操 | 日韩精品一区二区三区毛片 | 四虎黄色影院 | 久久婷婷综合中文字幕 | 99热久 | 成人黄色免费观看 | 双性强迫开宫灌满h | 欧美乱妇高清无乱码 | 亚洲黄网在线 | 巨大欧美黑人xxxxbbbb | 波多久久夜色精品国产 | 夜夜爽8888 | 手机看片国产免费久久网 | 99国产成人精品2021 | 97影院理论在线观看 | 国产一级特黄aa大片免费 | 一级特级aaaa毛片免费观看 | 国产亚洲精品久久久久久午夜 | 一区二区三区四区视频在线 | 色先锋av资源中文字幕 | 一级做a爱 一区 | 加勒比日本道 | 五月综合激情视频在线观看 | 国产乱人视频免费播放 | 免费成人黄色网址 | 国产性片在线观看 | 日本黄色免费网址 | 亚洲视频 欧美视频 | 天天操夜夜操视频 | 成年啪啪网站免费播放看 |