#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define BUF_SIZE 1024
#define OPSZ 4
#define RLT_SIZE 4
void error_handling(char *message);
int main(int argc, char* argv[])
{
int sock;
int sock_r;
char opmsg[BUF_SIZE];
int opnd_cnt, i,a;
int total=0;
int up,down,hit;
int result[BUF_SIZE];
char try="";
up = 0;
down =0;
hit =0;
struct sockaddr_in serv_addr;
if(argc!=3){
printf("Usage : %s <IP> <port>\n", argv[0]);
exit(1);
}
sock=socket(PF_INET, SOCK_STREAM, 0);
if(sock == -1)
error_handling("socket() error");
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=inet_addr(argv[1]);
serv_addr.sin_port=htons(atoi(argv[2]));
if(connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1)
error_handling("connect() error!");
printf("Welcome!");
while(a=1){
fputs("\nof your answers?: ", stdout);
scanf("%d", &opnd_cnt);
total += opnd_cnt;
opmsg[0]=(char)opnd_cnt;
for(i=0; i<opnd_cnt; i++) {
printf("Answer%d: ", i+1);
scanf("%d", (int*)&opmsg[i*OPSZ+1]);
}
fgetc(stdin);
write(sock, opmsg, opnd_cnt*OPSZ+2);
read(sock, &result[0], BUF_SIZE);
read(sock, &result[2], BUF_SIZE);
read(sock, &result[1], BUF_SIZE);
read(sock, &result[3], BUF_SIZE);
printf("\n[Replay from Server]");
printf("\n UP: %d, DOWN: %d, HIT: %d\n",result[0],result[1],result[2]);
if(result[2]>0){
printf("You've got the right answer: %d\n",result[3]);
printf("Your score is 100/%d",total);
printf("Try again? (y/n):");
scanf("%c", try);
if(try=="y"||try=="Y"){
a=0;
}
else if(try=="n"||try=="N"){
a=1;
}
}
close(sock);
return 0;
}
}
void error_handling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
소켓프로그래밍으로 코드 짰는데 뭐가 잘못된지 모르겠어요 알려줘용
서버쪽은 오류가 나질 않는데 클라이언트 쪽에서만 오류가 나네요 ㅜㅜ
에러 메시지를 찍어주세요
123_client.c: In function ‘main’: 123_client.c:23:11: warning: initialization of ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 23 | char try=""; | ^~ 123_client.c:72:11: warning: format ‘%c’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=] 72 | scanf("%c", try); | ~^ ~~~ | |
이렇게 떠요ㅜㅜ
자 그럼 이제 구글을 검색해 보세요 ~