2013年5月14日火曜日

反転された文字列を返すreverseサーバー

前々回に紹介したechoサーバーと、前回紹介した文字列反転プログラムを組み合わせて、クライアントから送られてきた文字列を逆さにして返すreverseサーバーを作ってみましょう。


解答例:reverse_server.c


/* 受け取った文字列を逆にして返すreverseサーバー */

#include <sys/types.h>  
#include <sys/socket.h> 
#include <sys/uio.h>  
#include <netinet/in.h> 
#include <string.h> 
#include <stdio.h>  
#include <unistd.h> 

int main()
{
int sockfd, acceptfd; 
int len; 
char buf[256];
struct sockaddr_in server, client; 

/* ソケットを作る */
sockfd = socket(PF_INET, SOCK_STREAM, 0);

/* ソケットを初期化する */
memset(&server, 0, sizeof(server)); 
server.sin_family = PF_INET; 
server.sin_port   = htons(7000); 
server.sin_addr.s_addr = htonl(INADDR_ANY); 
bind(sockfd, (struct sockaddr *)&server, sizeof(struct sockaddr_in));

/* クライアントからの接続を待つ */
listen(sockfd, 5);

/* クライアントとの接続を確立する */
memset(&client, 0, sizeof(client)); 
len = sizeof(client); 
acceptfd = accept(sockfd, (struct sockaddr*)&client, &len);

/* データを読みとる */
read (acceptfd, buf, sizeof(buf));
printf("accept data: %s\n", buf);

/* 受け取った文字列を反転させる */
int i;
int length;
length = strlen(buf);
for(i = 0; i < (length/2); i++){
  char tmp;
  tmp = buf[i];
  buf[i] = buf[length - i - 1];
  buf[length - i - 1] = tmp;
}

/* データを書き込む */
write (acceptfd, buf, strlen(buf));
write (acceptfd, "\n", 1);

/* 接続を終了する */
close(acceptfd); 
close(sockfd); 

return (0); 

}


使い方はechoサーバーと同じです

0 件のコメント:

コメントを投稿