web-dev-qa-db-ja.com

単純なCまたはC ++ TCPサーバーとクライアントの例とは何ですか?

非常に小さな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)
41
Nick Bolton

過去に Beejのネットワークプログラミングガイド を使用しました。 CではなくC++ですが、例は良好です。単純なクライアントおよびサーバーのプログラム例については、直接 セクション6 に移動してください。

42
Bill the Lizard

コードをシンプルにするには、おそらく従来の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++でわかるように、明示的なキャストが必要です。

13
anon

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

6
bayda

何年も前ですが、clsocketは本当にすてきな小さなクロスプラットフォーム(Windows、Linux、Mac OSX)のようです: https://github.com/DFHack/clsocket

1
Erwin Coumans

以下にいくつかの例を示します。

1)シンプル
2)フォーク
3)スレッド

ベースのサーバー:

http://www.martinbroadhurst.com/server-examples.html

0
Guy L