プロが教える店舗&オフィスのセキュリティ対策術

サーバーとクライアントで足し算を行うプログラムを実行するとサーバーからの計算結果が返ってきません。ソースコードは以下に示します。
クライアントのプログラム

#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);
}
}

A 回答 (2件)

fromlenはどんな値になってるんでしょうか。


fromlen = sizeof(from_address);
とか必要ありませんでしたっけ。
    • good
    • 0

わかりやすいプログラムの書き方ですね。


ですが、送信と受信などの部分を分けたところなど
ほかの設定情報も欠いてみるべきだと思います。
畑違いの言語なのでちょっとアドバイスできませんが
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!