lwip の異なるソケットがそれぞれモニターとクライアント接続として使用されます

ここに画像の説明を挿入
LWIP では、ネットワーク デバイス (イーサネット カードなど) が複数のソケットを作成して、さまざまなネットワーク接続を処理できます。listen通常、接続をリッスンするためのソケット ( ) と、接続をアクティブに開始するための別のソケット ( )を作成できますconnect各ソケットが適切に初期化および構成されていることを確認する限り、これは完全に可能です。

以下は、LWIP で 2 つのソケット (1 つはサーバーとして、もう 1 つはクライアントとして) を作成する方法を示す簡単な例です。これは基本的な例であり、エラー処理やリソースのクリーンアップは含まれていないことに注意してください。

#include "lwip/sockets.h"
#include "lwip/ip_addr.h"

void create_sockets(void)
{
    
    
    int listen_sock, client_sock;
    struct sockaddr_in server_addr, client_addr;

    /* Create server socket */
    listen_sock = lwip_socket(AF_INET, SOCK_STREAM, 0);
    if (listen_sock < 0) {
    
    
        // Handle error
        return;
    }

    /* Initialize server sockaddr structure */
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(1234);
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);

    /* Bind the server socket */
    if (lwip_bind(listen_sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
    
    
        // Handle error
        return;
    }

    /* Start listening for incoming connections */
    if (lwip_listen(listen_sock, 5) < 0) {
    
    
        // Handle error
        return;
    }

    /* Create client socket */
    client_sock = lwip_socket(AF_INET, SOCK_STREAM, 0);
    if (client_sock < 0) {
    
    
        // Handle error
        return;
    }

    /* Initialize client sockaddr structure */
    memset(&client_addr, 0, sizeof(client_addr));
    client_addr.sin_family = AF_INET;
    client_addr.sin_port = htons(1235);
    client_addr.sin_addr.s_addr = htonl(INADDR_ANY);

    /* Connect to the server */
    if (lwip_connect(client_sock, (struct sockaddr *)&client_addr, sizeof(client_addr)) < 0) {
    
    
        // Handle error
        return;
    }

    /* Now the server socket (listen_sock) is listening for connections, and 
       the client socket (client_sock) is connected to the server. */
}

これは単なる基本的な例であり、エラー処理やリソースのクリーンアップは含まれていません。実際の使用では、エラー処理の追加、リソースのクリーンアップ、クライアントとサーバー間のデータ送信の処理など、実際のニーズに応じてこの例を変更および拡張する必要があります。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_33471732/article/details/132176804