私は、TCP-IPサーバーとクライアントにこれらの簡単なサンプルC++コードを使用してBSDソケットプログラミングを学習し、理解しようとしています。私はsocket()、bind()、listen()、accept()、read/recv()のような標準APIを読んだことがあり、g ++/Linuxでコンパイルするコードもあります。シンプルなソケットプログラミングコードの動作
私がやりたいことは、実際にはサーバーコードを実行してからクライアントを使用して接続し、クライアントからサーバーにデータを送信してその逆も行うことです受け取ったデータ。私の同じネットワークセグメントの2つのLinuxボックス(Ubuntu)内のすべて。私はこれらの2台のLinuxマシンにプライベートIPv4アドレスを与えました。
上記のネットワーク設定でこれを達成するには、これを達成するための設定と、以下のサーバーコードとクライアントコードのコード変更が必要ですか?私は本当にリアルタイムでネットワーク上で動作して見たいですか?
さらにコードへのポインタは、実践的なソケットプログラミング/ネットワークプログラミングを学ぶためのブログ記事が役立ちます。サーバー側では
//TCP SERVER
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <arpa/inet.h>
//#include <fcntl.h>
#include <unistd.h>
main()
{
char buf[100];
socklen_t len;
int k,sock_desc,temp_sock_desc;
struct sockaddr_in client,server;
memset(&client,0,sizeof(client));
memset(&server,0,sizeof(server));
sock_desc = socket(AF_INET,SOCK_STREAM,0);
server.sin_family = AF_INET; server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_port = 7777;
k = bind(sock_desc,(struct sockaddr*)&server,sizeof(server));
k = listen(sock_desc,20); len = sizeof(client);
temp_sock_desc = accept(sock_desc,(struct sockaddr*)&client,&len);
while(1)
{
k = recv(temp_sock_desc,buf,100,0);
if(strcmp(buf,"exit")==0)
break;
if(k>0)
printf("%s",buf);
} close(sock_desc);
close(temp_sock_desc);
return 0;
}
//TCP CLIENT
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <arpa/inet.h>
//#include <fcntl.h>
#include <unistd.h>
main()
{
char buf[100];
struct sockaddr_in client;
int sock_desc,k;
sock_desc = socket(AF_INET,SOCK_STREAM,0);
memset(&client,0,sizeof(client));
client.sin_family = AF_INET;
client.sin_addr.s_addr = inet_addr("127.0.0.1");
client.sin_port = 7777;
k = connect(sock_desc,(struct sockaddr*)&client,sizeof(client));
while(1)
{
gets(buf);
k = send(sock_desc,buf,100,0);
if(strcmp(buf,"exit")==0)
break;
}
close(sock_desc);
return 0;
}
何を試しましたか?何が起こったのですか? – Useless
これは最も簡単な例ですか? – Beta
@Useless Linux端末で実行可能ファイルとしてサーバーコードを実行しました。同じボックスの別の端末で、私はクライアントコードを実行しました。クライアント実行可能端末ウィンドウに何かを入力します。 server.Thatsで受け取ったものは、このデータフローがこのソケットコードの例でどのように起こるかを理解したいと思っています。 – goldenmean