LinuxでのC言語通信プログラムについて
サーバーとクライアントで足し算を行うプログラムを実行するとサーバーからの計算結果が返ってきません。ソースコードは以下に示します。
クライアントのプログラム
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(void)
{
int sockfd ;
int tolen , fromlen ;
struct sockaddr_in to_address , from_address ;
int result ;
int ch[3] ;
sockfd = socket(AF_INET,SOCK_DGRAM,0);
to_address.sin_family = AF_INET ;
to_address.sin_addr.s_addr = INADDR_ANY ;
to_address.sin_port = htons(9734) ;
tolen = sizeof(to_address);
bind(sockfd , (struct sockaddr *)&to_address , tolen);
printf("A = ");
scanf("%d",&ch[0]);
printf("B = ");
scanf("%d",&ch[1]);
sendto(sockfd , ch , sizeof(ch) , 0 , (struct sockaddr *)&to_address , tolen);
recvfrom(sockfd , ch , sizeof(ch) , 0 , (struct sockaddr *)&from_address , &fromlen);
printf("A + B = %d \n",ch[2]);
close(sockfd);
exit(0);
}
サーバーのプログラム
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(void)
{
int ch[3] ;
int sockfd ;
int tolen , fromlen ;
struct sockaddr_in to_address ;
struct sockaddr_in from_address ;
sockfd = socket(AF_INET,SOCK_DGRAM,0);
to_address.sin_family = AF_INET ;
to_address.sin_addr.s_addr = INADDR_ANY ;
to_address.sin_port = htons(9734) ;
tolen = sizeof(to_address);
bind(sockfd , (struct sockaddr *)&to_address , tolen);
while(1) {
printf("server waiting\n");
recvfrom(sockfd , ch , sizeof(ch) , 0 ,
(struct sockaddr *)&from_address , &fromlen);
ch[2] = ch[0] + ch[1] ;
sendto(sockfd , ch , sizeof(ch) , 0 , (struct sockaddr *)&from_address , fromlen);
}
}
お礼
どちらのコードもrootでコンパイル・実行していますが、fprintf(stderr,"number")を使うと、cli()でエラーが出てしまいます。 上のコードそのままだと特権不足というのは、 書き足す必要のあるコードがあるのですか?