【1問目】サンプルプログラムの追加箇所にプログラムを組み込み、それ以外にも変更箇所があったら修正する。最初にサーバーからクライアントに向けてhello client!!とメッセージを送信してクライアントはサーバーから送られてきたメッセージを受け取りhello client!!をターミナルに表示します。次にクライアン
トからサーバーに向けてheloo server!!とメッセージを送信してサーバーはクライアントから送られてきたhello serverターミナルに表示させると。メッセージを送信する場合はwrite関数を使用して受け取る場合はread関数をしようする。第一因数に指定する変数は、acceptの戻り値を使用すること。
↓実行例↓
*server*
1:ソケット生成成功
2:バインド成功
3:接続待機成功
4:接続受付成功
5:文字列送信成功
6:文字列受信成功: hello server!!
*client*
1:ソケット生成成功
2:サーバ接続成功
3:文字列受信成功: hello client!!
4:文字列送信成功
【2問目】サンプルプログラムの追加箇所にプログラムを組み込み、それ以外にも変更箇所があったら修正する。クライアントからサーバーにメッセージを複数回送信するプログラムを作成する。送信するデータはキーボードから入力された文字列で1桁入力する毎にサーバーへ送信する。サーバープログラムではクライアント
から送られてきた文字列をターミナルに表示させる。ただし、"BYE!"と入力した場合はクライアントプログラムとサーバプログラムを終了させること。
↓実行例↓
*client*(すべて自分で入力)
Heloo!
THIS
これはプログラムです。
BYE!
*srver*(clientで入力させたものを表示)
Heloo!
THIS
これはプログラムです。
BYE!
■サンプルプログラム(client)
#include<sys/socket.h>
#include<stdlib.h>
#include<arpa/inet.h>
int main(void){
int sockfd;
struct sockaddr_in servaddr;
int connfd;
//ソケットの生成
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0){
perror("ソケット生成失敗");
exit(1);
}
else{
printf("1:ソケット生成成功\n");
}
//ソケットの設定
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(9000);
servaddr.sin_addr.s_addr=inet_addr("アドレス");
//サーバへの接続
connfd=connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
if(connfd<0){
perror("サーバ接続失敗");
exit(1);
}
else{
printf("2:サーバ接続成功\n");
}
//↓追加部分↓
//↑ここまで↑
//ソケットを閉じる
close(sockfd);
return 0;
}
■サンプルプログラム(server)
#include<sys/socket.h>
#include<arpa/inet.h>
int main(void){
int sockfd;
struct sockaddr_in servaddr;
int connfd;
int len;
int cliaddr;
//ソケットの生成
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0){
perror("ソケット生成失敗");
exit(1);
}
else{
printf("1:ソケット生成成功\n");
}
//ソケットの設定
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(9000);
servaddr.sin_addr.s_addr = INADDR_ANY;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, NULL, 0);
// ソケットに名前をつける
if(bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0){
perror("バインド失敗");
exit(1);
}
else{
printf("2:バインド成功\n");
}
// 接続を待ち受ける
if(listen(sockfd, 5) < 0){
perror("接続待機失敗");
exit(1);
}
else{
printf("3:接続待機成功\n");
}
// 接続要求を受け付ける
len = sizeof(cliaddr);
connfd = accept(sockfd, (struct sockaddr *)&cliaddr, (socklen_t *)&len);
if(connfd < 0){
perror("接続受付失敗");
exit(1);
}
else{
printf("4:接続受付成功\n");
}
//↓追加部分↓
//↑ここまで↑
// ソケットを閉じる
close(sockfd);
return 0;
}