非常に小さな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)
過去に Beejのネットワークプログラミングガイド を使用しました。 CではなくC++ですが、例は良好です。単純なクライアントおよびサーバーのプログラム例については、直接 セクション6 に移動してください。
コードをシンプルにするには、おそらく従来の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
次のインクルードを両方のファイルに追加します。
#include <cstdlib>
#include <cstring>
#include <unistd.h>
client.c で、次の行を変更します。
if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0)
{ ... }
に:
if (connect(sockfd,(const sockaddr*)&serv_addr,sizeof(serv_addr)) < 0)
{ ... }
C++でわかるように、明示的なキャストが必要です。
boost :: asio libを試してください( http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio.html )多くの例があります。
何年も前ですが、clsocketは本当にすてきな小さなクロスプラットフォーム(Windows、Linux、Mac OSX)のようです: https://github.com/DFHack/clsocket