解答例: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サーバーと同じです