46

非常に小さな C または C++ TCP サーバー/クライアント ソリューションを迅速に実装する必要があります。これは、あるコンピューターから別のコンピューターに文字列のバイト配列を転送するだけです。スケーラブル/過度に複雑である必要はありません。シンプルなほど良い。できれば手早く汚い。

このチュートリアルのコードを使用しようとしましたが、Linux で g++ を使用してビルドすることはできませんでした: http://www.linuxhowtos.org/C_C++/socket.htm

これを実行しているシステムは非常に制限されているため、可能であれば、サードパーティのライブラリは避けたいと思います。既存のアプリケーションが既に実装されているため、これは C または C++ である必要があります。

emg-2の回答のおかげで、次の手順を使用して、上記のコード サンプルを C++ と互換性を持たせることができました。

これらのヘッダーをクライアントとサーバーの両方に追加します。

#include <cstdlib>
#include <cstring>
#include <unistd.h>

server.cで、clilen のタイプを socklen_t に変更します。

int sockfd, newsockfd, portno/*, clilen*/;
socklen_t clilen;

client.cで、次の行を変更します

if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0) { ... }

に:

if (connect(sockfd,(const sockaddr*)&serv_addr,sizeof(serv_addr)) < 0)
4

5 に答える 5

46

過去に、 Beej の Guide to Network Programmingを使用したことがあります。これは C++ ではなく C で書かれていますが、例は優れています。簡単なクライアントとサーバーのサンプル プログラムについては、直接セクション 6に進んでください。

于 2009-03-19T14:09:58.907 に答える
13

コードが単純でなければならない場合は、おそらく従来の BSD ソケットに基づく C の例を求めるでしょう。のようなソリューションboost::asioは、短くて単純な「hello world」の例になると、非常に複雑です。

あなたが言及した例をコンパイルするには、C++ コンパイラでコンパイルしているため、簡単な修正を行う必要があります。次のファイルを参照しています:
http://www.linuxhowtos.org/data/6/server.c
http://www.linuxhowtos.org/data/6/client.c
from: http://www. linuxhowtos.org/C_C++/socket.htm

  1. 次のインクルードを両方のファイルに追加します。

    #include <cstdlib>
    #include <cstring>
    #include <unistd.h>
    
  2. client.cで、の行を変更します。

    if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0)
    { ... }
    

    に:

    if (connect(sockfd,(const sockaddr*)&serv_addr,sizeof(serv_addr)) < 0)
    { ... }
    

C++ でわかるように、明示的なキャストが必要です。

于 2009-03-19T14:21:11.920 に答える
5

boost::asio lib ( http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio.html ) を試してみてください。多くの例があります。

于 2009-03-19T14:03:08.627 に答える