Linux UDP Socket Client-Server는 되는데 Server-Client는 실패하네요
여름
Linux에서 UDP Socket으로 양쪽에서 String 왔다갔다하는 프로그램을 짜고 있습니다.
Client에서 Server로는 데이터가 잘 넘어가서 출력이 되는데, Server에서 Client로는 전송이 계속 실패합니다.
에러 메시지를 뽑아보니Address family not supported by protocol 에러가 납니다.연결이 제대로 안 된 거면 양방향 다 안 되어야 하는 게 아닌지... 파이프도 아니고 왜 단방향만 되는지 모르겠습니다.
이곳저곳에서 예시 찾아서 대입해보는데도 자꾸 실패하니 도저히 이유를 모르겠습니다. 부탁드립니다.코드==================== Server ===================
#include stdio.h
#include unistd.h
#include stdlib.h
#include string.h
#include sys/socket.h
#include sys/stat.h
#include arpa/inet.h#define MAXBUF 512int main() {
int sock;
int clen;
struct sockaddr_in client_addr, server_addr;
char sendString[MAXBUF], receiveString[MAXBUF];
int pid; if ((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) 0) {
perror(socket error : );
exit(1);
} memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(9200); if (bind(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) 0) {
perror(bind error : );
exit(1);
} clen = sizeof(client_addr); while(1) {
printf(Server : );
scanf(%s, &sendString); if (strcmp(sendString, exit) == 0) break;
printf(Server : );
scanf(%s, &sendString); if (strcmp(sendString, exit) == 0) break; //Sending
if (sendto(sock, (void *)sendString, MAXBUF, 0, (struct sockaddr *)&client_addr, clen) 0) perror(sendto error : );
if (recvfrom(sock, (void *)receiveString, MAXBUF, 0, (struct sockaddr *)&client_addr, &clen) 0) perror(recvfrom error : );
printf(Client : %s\n, receiveString);
}
} close(sock);
exit(0);
}
==================== Client ===================
#include stdio.h
#include stdlib.h
#include unistd.h
#include string.h
#include sys/socket.h
#include sys/stat.h
#include sys/types.h
#include arpa/inet.h#define MAXBUF 512int main() {
int sock;
int clen;
struct sockaddr_in client_addr, server_addr;
char sendString[MAXBUF], receiveString[MAXBUF];
int pid; if ((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) 0) {
perror(socket error : );
} clen = sizeof(server_addr); memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(127.0.0.1);
server_addr.sin_port = htons(9200); while(1) {
printf(Client : );
scanf(%s, &sendString); if (strcmp(sendString, exit) == 0) break;
//Sending
if (sendto(sock, (void *)sendString, MAXBUF, 0, (struct sockaddr *)&server_addr, clen) 0) perror(sendto error : ); //Receiving
if (recvfrom(sock, (void *)receiveString, MAXBUF, 0, (struct sockaddr *)&server_addr, &clen) 0) perror(recvfrom error : );
printf(Server : %s\n, receiveString);
} close(sock);
exit(0);
}
-
은새
결국 자체 해결. 근데 막 바꿔대서 어떻게 해야 소켓 하나로 서버-클라이언트 통신을 했는지 잘 모르겠네요.
어쨋든 확실한 건 recvstring, sendstring을 char *로 두면 bad address 에러가 걸린다는거... -
감추어왔던
서버쪽에서는 보낼 클라이언트의 정보를 모르니 당연히 전송을 할수 없죠.
tcp통신과 달리 udp는 listen과정이 없어서 서버측도 데이터를 보낼려면 클라이언트의 정보를 알아야 합니다. 근데 서버쪽 코드를 보면 client_addr에 대해 아무런 설정도 없이 그 주소로 전송을 시도하니 에러가 뜨는게 당연하죠
아마 클라이언트 실행파일 두개 뛰우고 전송하면 데이터 잘 주고받을껄요
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2695355 | c언어 for함수 | 미쿡 | 2025-05-19 |
2695327 | 안녕하세요 제가 이번에 좀 큰 프로그램을.. | 악당 | 2025-05-19 |
2695295 | mutex동기화의 thread기반 채팅 서버소스 질문입니다 | 그루터기 | 2025-05-19 |
2695270 | 질문이요..swap 관한겁니다..ㅠㅠ (3) | 콩알녀 | 2025-05-19 |
2695244 | 노땅초보궁금한게 하나 있는데요..반복문(while문)초보자질문 (6) | 큰꽃늘 | 2025-05-18 |
2695166 | do while 문 어떤것이잘못된건지 모르겠어요 (2) | 아이폰 | 2025-05-18 |
2695122 | 구조체에 대해 물어보고 싶은게 있습니다 ^^^.. (7) | 수련 | 2025-05-17 |
2695091 | txt 파일 입출력 후 2차 배열에 저장하기입니다. (3) | 헛장사 | 2025-05-17 |
2695063 | 수도요금 프로그램좀 짜주세요. | 시내 | 2025-05-17 |
2695033 | 답변좀요ㅠㅠ (1) | 비사벌 | 2025-05-16 |
2695010 | C++의 STL은 왜 굳이 템플릿화 시켜서 라이브러리를 만드나요? (초보수준의 질문..) (2) | 엘보어 | 2025-05-16 |
2694958 | 로직이 변한다는 것에 대해서 궁금합니다. | 튼동 | 2025-05-16 |
2694929 | 열혈강의 25-2 두번째 문제 질문 | 지우개 | 2025-05-15 |
2694900 | dequeue 에서 리턴값 프린트 방법알려주세요 오늘 12시까지 대화방에 있습니다 도와주세요 | 미투리 | 2025-05-15 |
2694854 | 절대값을 구할때 (2) | 그녀는귀여웠다 | 2025-05-15 |
2694827 | 이제 어떻게 공부해야할지 모르겠네요 | 새얀 | 2025-05-14 |
2694778 | 순열 계산요. | 맛조이 | 2025-05-14 |
2694754 | ShowWindow 함수를 이용하려 하는데 질문있습니다. (2) | 파도 | 2025-05-14 |
2694731 | 리눅스 커널의 시작점 질문 | 미르 | 2025-05-13 |
2694702 | 이거 뭐가문제인가요 코드수정좀 (3) | 맑은 | 2025-05-13 |