目次
例子-一对一的upd/ip协议的服务器模型" >例子-一对一的upd/ip协议的服务器模型
ホームページ システムチュートリアル Linux Linux IPC udp/ip ソケット プログラミング: ネットワーク通信を実現する効率的な方法

Linux IPC udp/ip ソケット プログラミング: ネットワーク通信を実現する効率的な方法

Feb 11, 2024 am 10:51 AM
linux Linuxチュートリアル Linuxシステム Linuxコマンド シェルスクリプト 埋め込みLinux Linux を始める Linux学習

Linux システムは、マルチタスクの同時実行をサポートするオペレーティング システムであり、複数のプロセスを同時に実行できるため、システムの使用率と効率が向上します。ただし、これらのプロセス間でデータ交換とコラボレーションが必要な場合は、シグナル、メッセージ キュー、共有メモリ、セマフォなどのプロセス間通信 (IPC) メソッドを使用する必要があります。その中でも、udp/ip ソケットは比較的効率的で柔軟な IPC 方式であり、ネットワークの特定の詳細やプロトコルを気にせずに、2 つ以上のプロセスがネットワークを介してデータを送信できるようになります。

Linux IPC udp/ip socket 编程:一种实现网络通信的高效方式rree ######ソケット()###### リーリー

domain: プロトコル ファミリ (ネットワーク通信 (IP) またはローカル通信 (xxx.socket))

AF_INET

ipv4 ネットワーク プロトコルに指定されたネットワーク プロトコルを実装するために使用されます。
  • type: プロトコル (TCP または UDP)
    SOCK_DGRAM //データグラム ソケット、実装には UDP プロトコルが含まれますが、これに限定されません。UDP プロトコルは信頼性が低く、コネクションレス型のデータグラム通信パーティです。
  • protocol: 特別なプロトコル、一般的な Give 0
    連絡先アドレスを準備してください:
リーリー ######練る()###### リーリー

sockfd: ソケット ファイルの fd (socket() によって返される)

addr:socketaddr_un または soketaddr_in にキャストする必要があります。上記を参照

addrlen

: 通信アドレスのサイズ。sizeof(); を使用します。 ######に送る()###### リーリー
dest_addr: 宛先アドレス(受信者情報)
addrlen: 宛先アドレスのサイズ

A注

send(sockfd, buf, len, flags); sendto(sockfd, buf, len, flags, NULL, 0) と同等;
recv()/send()はsockfdによるデータの送受信を意味しますが、tcpでは送受信前にsockfdが対応するアドレスに接続されているため、送受信先・宛先を指定する必要はありませんが、udpでは送受信時に接続がないため指定が必要です。

recvfrom()

リーリー

src_addr
    : データ送信者の通信アドレスを保存するために使用される構造体ポインタ
  • addrlen
  • : 送信者のアドレス サイズを保存するために使用されるポインタ型
  • ###注記:###
    • recv(sockfd, buf, len, flags); 等价于 recvfrom(sockfd, buf, len, flags, NULL, 0);
    • accept() and recvfrom() 后面的参数是用来提供来电显示的
    • 一个server对应多个client
    • server可以不知道client的地址, 但是client得知道server的地址
    • send data 一定要知道对方地址
    • receive data不需要知道对方地址
    • TCP/IP的socket都是SOCK_STREAM的,全程连接,通过socket就能找到对方地址, send data的话,直接丢给socket就行
    • UDP/IP的socket是SOCK_DGRAM的,不全程连接,不能通过socket找到对方,send data的话,server中需要使用recvfrom()来知道client的地址, 所以肯定要sendto();client本来就知道server的地址, 直接sendto()
    • recvfrom()的唯一意义就是在udp-server中配合sendto()使用
    • 因为不能通过socket找到对方, 只要是udp发消息, 就得通过sendto()
    server client
    TCP/IP send();recv() send();recv()
    UDP/IP recvfrom();sendto() recv();sendto()

    例子-一对一的upd/ip协议的服务器模型

    //udp/ip server 五步走
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    int main(){
        //1. 创建socket
        int sockfd=socket(AF_INET,SOCK_DGRAM,0);
        if(-1==sockfd)
            perror("socket"),exit(-1);
        
        //2. 准备通信地址
        struct sockaddr_in addr;
        addr.sin_family=AF_INET;
        addr.sin_port=htons(8888);
        addr.sin_addr.s_addr=inet_addr("176.43.11.211");
    
        //3. 绑定socket和通信地址
        int res=bind(sockfd,(struct sockaddr*)&addr,sizeof(addr));
        if(-1==res)
            perror("bind"),exit(-1);
        printf("bind success\n");
    
        //4. 进行通信
        char buf[100]={0};
        struct sockaddr_in recv_addr;       //为使用recvfrom得到client地址做准备, 
    最终为sendto()做准备
        socklen_t len=sizeof(recv_addr);
        res=recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr*)&recv_addr,&len);
        if(-1==res)
            perror("recvfrom"),exit(-1);
    
        char* ip=inet_ntoa(recv_addr.sin_addr);             
    //将recvfrom获得client地址转换成点分十进制字符串
        printf("data received from client :%s is:%d\n",ip,res); 
    
        res=sendto(sockfd,"I received",sizeof("I received"),0,(struct sockaddr*)&recv_addr,len)
    ;//使用recvfrom获得的client地址
        if(-1==res)
            perror("sendto"),exit(-1);
    
        //5. 关闭socket
        res=close(sockfd);
        if(-1==res)
            perror("close"),exit(-1);
        printf("close success\n");
            
        return 0;
    }
    //udp/ip client
    #include
    #include
    #include  //close()
    #include
    #include
    #include
    #include
    int main(){
        int sockfd=socket(AF_INET,SOCK_DGRAM,0);
        if(-1==sockfd)
            perror("socket"),exit(-1);
        printf("create socket succesfully\n");
        struct sockaddr_in addr;
        addr.sin_family=AF_INET;
        addr.sin_port=htons(8888);
        addr.sin_addr.s_addr=inet_addr("176.43.11.211");    
    
    //这个是server的地址, 虽然没有
    
    connect, which means 不能通过socket找到这个地址, 但是我们还是知道这个地址的, sendto()是可以直接用的
    
        int res=sendto(sockfd,"hello",sizeof("hello"),0,(struct sockaddr*)&addr,sizeof(addr));
        if(-1==res)
            perror("sendto"),exit(-1);
        printf("data sent size:%d\n",res);
        char buf[100]={0};
        res=recv(sockfd,buf,sizeof(buf),0);
        if(-1==res)
            perror("recv"),exit(-1);
        printf("data received from server:%s\n",buf);
        res=close(sockfd);
        if(-1==res)
            perror("close"),exit(-1);
    
        return 0;
    }
    
    ログイン後にコピー

    本文介绍了Linux系统中udp/ip socket编程的方法,包括socket的创建、绑定、发送、接收、关闭和设置等方面。通过了解和掌握这些知识,我们可以更好地使用udp/ip socket来实现进程间通信,提高系统的性能和可靠性。当然,Linux系统中udp/ip socket编程还有很多其他的特性和用法,需要我们不断地学习和探索。

以上がLinux IPC udp/ip ソケット プログラミング: ネットワーク通信を実現する効率的な方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Deepseek Webバージョンの入り口Deepseek公式ウェブサイトの入り口 Deepseek Webバージョンの入り口Deepseek公式ウェブサイトの入り口 Feb 19, 2025 pm 04:54 PM

DeepSeekは、Webバージョンと公式Webサイトの2つのアクセス方法を提供する強力なインテリジェント検索および分析ツールです。 Webバージョンは便利で効率的であり、公式ウェブサイトは包括的な製品情報、ダウンロードリソース、サポートサービスを提供できます。個人であろうと企業ユーザーであろうと、DeepSeekを通じて大規模なデータを簡単に取得および分析して、仕事の効率を向上させ、意思決定を支援し、イノベーションを促進することができます。

DeepSeekをインストールする方法 DeepSeekをインストールする方法 Feb 19, 2025 pm 05:48 PM

DeepSeekをインストールするには、Dockerコンテナ(最も便利な場合は、互換性について心配する必要はありません)を使用して、事前コンパイルパッケージ(Windowsユーザー向け)を使用してソースからコンパイル(経験豊富な開発者向け)を含む多くの方法があります。公式文書は慎重に文書化され、不必要なトラブルを避けるために完全に準備します。

BitPie Bitpie ウォレット アプリのダウンロード アドレス BitPie Bitpie ウォレット アプリのダウンロード アドレス Sep 10, 2024 pm 12:10 PM

BitPie Bitpie ウォレット アプリをダウンロードするにはどうすればよいですか?手順は次のとおりです。 AppStore (Apple デバイス) または Google Play ストア (Android デバイス) で「BitPie Bitpie Wallet」を検索します。 「入手」または「インストール」ボタンをクリックしてアプリをダウンロードします。コンピューター版の場合は、BitPie ウォレットの公式 Web サイトにアクセスし、対応するソフトウェア パッケージをダウンロードしてください。

Bitget公式ウェブサイトのインストール(2025初心者ガイド) Bitget公式ウェブサイトのインストール(2025初心者ガイド) Feb 21, 2025 pm 08:42 PM

Bitgetは、スポット取引、契約取引、デリバティブなど、さまざまな取引サービスを提供する暗号通貨交換です。 2018年に設立されたこのExchangeは、シンガポールに本社を置き、安全で信頼性の高い取引プラットフォームをユーザーに提供することに取り組んでいます。 Bitgetは、BTC/USDT、ETH/USDT、XRP/USDTなど、さまざまな取引ペアを提供しています。さらに、この取引所はセキュリティと流動性について評判があり、プレミアム注文タイプ、レバレッジド取引、24時間年中無休のカスタマーサポートなど、さまざまな機能を提供します。

OUYI OKXインストールパッケージが直接含まれています OUYI OKXインストールパッケージが直接含まれています Feb 21, 2025 pm 08:00 PM

世界をリードするデジタル資産交換であるOuyi Okxは、安全で便利な取引体験を提供するために、公式のインストールパッケージを開始しました。 OUYIのOKXインストールパッケージは、ブラウザに直接インストールでき、ユーザー向けの安定した効率的な取引プラットフォームを作成できます。インストールプロセスは、簡単で理解しやすいです。

gate.ioインストールパッケージを無料で入手してください gate.ioインストールパッケージを無料で入手してください Feb 21, 2025 pm 08:21 PM

Gate.ioは、インストールパッケージをダウンロードしてデバイスにインストールすることで使用できる人気のある暗号通貨交換です。インストールパッケージを取得する手順は次のとおりです。Gate.ioの公式Webサイトにアクセスし、「ダウンロード」をクリックし、対応するオペレーティングシステム(Windows、Mac、またはLinux)を選択し、インストールパッケージをコンピューターにダウンロードします。スムーズなインストールを確保するために、インストール中に一時的にウイルス対策ソフトウェアまたはファイアウォールを一時的に無効にすることをお勧めします。完了後、ユーザーはGATE.IOアカウントを作成して使用を開始する必要があります。

OUYI Exchangeダウンロード公式ポータル OUYI Exchangeダウンロード公式ポータル Feb 21, 2025 pm 07:51 PM

OKXとしても知られるOUYIは、世界をリードする暗号通貨取引プラットフォームです。この記事では、OUYIの公式インストールパッケージのダウンロードポータルを提供します。これにより、ユーザーはさまざまなデバイスにOUYIクライアントをインストールすることが容易になります。このインストールパッケージは、Windows、Mac、Android、およびiOSシステムをサポートします。インストールが完了した後、ユーザーはOUYIアカウントに登録またはログインし、暗号通貨の取引を開始し、プラットフォームが提供するその他のサービスを楽しむことができます。

gate.io公式ウェブサイト登録インストールパッケージリンク gate.io公式ウェブサイト登録インストールパッケージリンク Feb 21, 2025 pm 08:15 PM

Gate.ioは、広範なトークン選択、低い取引手数料、ユーザーフレンドリーなインターフェイスで知られる高く評価されている暗号通貨取引プラットフォームです。高度なセキュリティ機能と優れたカスタマーサービスにより、Gate.ioは、信頼できる便利な暗号通貨取引環境をトレーダーに提供します。 gate.ioに参加する場合は、リンクをクリックして公式登録インストールパッケージをダウンロードして、暗号通貨取引の旅を開始してください。

See all articles