1.不删除 下面这段代码的话,会出错.
if (argc !=2){ //number of parameters wrong
perror("Input: ./server12 to use");
exit(1);
}
2.删除了之后,可以编译但运行的时候会提示Segmentation fault (core dumped);
3.修改了 servaddr.sin_addr.s_addr= inet_addr(argv[1]);改为htonl(INADDR_ANY),2的错误已经解决,但是网络连接失败..Fail to connect to the server: Connection refused
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXLINE 1024
#define SERV_PORT 10010
int main(int argc, char **argv) {/
int sockfd;
struct sockaddr_in servaddr;
char recvmsg[MAXLINE];
unsigned num1, num2, result;
char operator, valid;
char str1[] = "Valid", str2[] = "Invalid", valid_s[10];
char sendmsg[MAXLINE];
if (argc !=2){
perror("Input: ./server12 <IP address of the server> to use");
exit(1);
}
if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) <0){
perror("Socket initialize failed");
exit(2);
}
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr= inet_addr(argv[1]);/
servaddr.sin_port = htons(SERV_PORT);
if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr))<0){
perror("Problem in connecting to the server");
exit(3);
}
while(1){
printf("%s\n", "Please enter the first integer");
while (scanf("%u", &num1) != 1){
while(getchar() != '\n');
printf("%s\n", "Input type illegal");
printf("%s\n", "Please enter the first integer again");
}
while(getchar() != '\n');
// get operation
printf("%s\n", "Please enter the operation ");
while((scanf("%c", &operator)!= 0) && (operator !=43 &&operator != 45 && operator!= 120 && operator!=47)){
while(getchar() != '\n');
printf("%s\n", "Operator is illegal or does not exist");
printf("%s\n", "Please check the input");
}
while(getchar() != '\n');
// get the second number to operate
printf("%s\n", "Please enter the second integer");
while (scanf("%u", &num2) != 1){//check input type
while(getchar() != '\n');
printf("%s\n", "Input type illegal");
printf("%s\n", "Please enter the second integer again");
}
while(getchar() != '\n');
memcpy(sendmsg, &operator, 1);
memcpy(sendmsg + 1, &num1, 4);
memcpy(sendmsg + 5, &num2, 4);
//send message
send(sockfd, sendmsg, MAXLINE, 0);
printf("Message sent to the server: %u %c %u\n", num1, operator, num2);
if (recv(sockfd, recvmsg, MAXLINE,0) == 0){
perror("The server has terminated ");
exit(4);
}else{
memcpy(&result, recvmsg + 9, 4);
valid = recvmsg[13];
if(valid == '1'){//success
strncpy(valid_s, str1, sizeof(str1));
}else//failed
{
strncpy(valid_s, str2, sizeof(str2));
}
printf("Result: %u %c %u = %d, %s.\n", num1, operator, num2, result, valid_s);//print the result
}
}
exit(0);
}