#include<stdio.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#define MAX 255
void exitWithError(char *message);
int main(int argc,char *argv[])
{
int sock;
struct sockaddr_in servAddr;
struct sockaddr_in fromAddr;
unsigned short servPort;
unsigned int fromSize;
char *echoString;
char *servIP;
char echoBuffer[MAX+1];
int echoStringLen;
int recvStringLen;
if(argc < 3){
fprintf(stderr,"Usage: %s <ServIP> <Word> [<Serv Port>]\n",argv[0]);
exit (1);
}
echoString = argv[2];
servIP = argv[1];
if((echoStringLen = strlen(echoString)) > MAX)
exitWithError("word is too long\n");
if(argc == 4)
servPort = atoi(argv[3]);
else
servPort = 7;
if((sock = socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP)) < 0)
exitWithError("sockt() error\n");
memset(&servAddr,0,sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr(servIP);
servAddr.sin_port = htons(servPort);
if(sendto(sock,echoString,echoStringLen,0,(struct sockaddr *) &servAddr,sizeof(servAddr)) != echoStringLen)
exitWithError("sendto() error\n");
fromSize = sizeof(fromAddr);
if((recvStringLen = recvfrom(sock,echoBuffer,MAX,0,(struct sockaddr *) &fromAddr,&fromSize)) != echoStringLen)
exitWithError("recvfrom() error\n");
if(servAddr.sin_addr.s_addr != fromAddr.sin_addr.s_addr)
{
fprintf(stderr,"recv from unkown host\n");
exit (1);
}
echoBuffer[recvStringLen] = '\0';
printf("Received: %s\n",echoBuffer);
close(sock);
return 0;
}
void exitWithError(char *message)
{
printf("%s\n",message);
exit (1);
}
コンパイルも通って実行もできるのに、なぜかエコーされてこないと思ったら
udpのエコーサーバが動いてませんでした。。。。
それで1時間ぐらい悩んでしまいました。
0 件のコメント:
コメントを投稿