다음은 조인c에 올라와 있는 Unix Domain Socket - UDP 의 소스
글쓴이: facered79 / 작성시간: 화, 2005/08/09 - 11:41오전
아래 소스에서
서버측의 send 부분실행시 -1 을 리턴 합니다..
클라이언트로 보낼 수 없다는 얘기인데요..
왜 안되는지 이유를 알수가 없습니다..
domain 을 이용한 udp 서버/클라이언트 소스를 구할 수 있을까요..
예제 : sum_server.c #include <sys/types.h> #include <sys/stat.h> #include <sys/socket.h> #include <sys/un.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> struct data { int a; int b; int sum; }; int main(int argc, char **argv) { int sockfd; int clilen; struct data mydata; struct sockaddr_un clientaddr, serveraddr; sockfd = socket(AF_UNIX, SOCK_DGRAM, 0); if (sockfd < 0) { perror("socket error : "); exit(0); } unlink(argv[1]); bzero(&serveraddr, sizeof(serveraddr)); serveraddr.sun_family = AF_UNIX; strcpy(serveraddr.sun_path, argv[1]); if (bind(sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0) { perror("bind error : "); exit(0); } clilen = sizeof(clientaddr); while(1) { recvfrom(sockfd, (void *)&mydata, sizeof(mydata), 0, (struct sockaddr *)&clientaddr, &clilen); printf("%d + %d = %d\n", mydata.a, mydata.b, mydata.a + mydata.b); sendto(sockfd, (void *)&mydata, sizeof(mydata), 0, (struct sockaddr *)&clientaddr, clilen); } close(sockfd); exit(0); }
예제 : sum_client.c #include <sys/types.h> #include <sys/stat.h> #include <sys/socket.h> #include <sys/un.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> struct data { int a; int b; int sum; }; int main(int argc, char **argv) { int sockfd; struct sockaddr_un serveraddr; int clilen; struct data mydata; sockfd = socket(AF_UNIX, SOCK_DGRAM, 0); if (sockfd < 0) { perror("exit : "); exit(0); } bzero(&serveraddr, sizeof(serveraddr)); serveraddr.sun_family = AF_UNIX; strcpy(serveraddr.sun_path, argv[1]); clilen = sizeof(serveraddr); mydata.a = atoi(argv[2]); mydata.b = atoi(argv[3]); mydata.sum =0; if (sendto(sockfd, (void *)&mydata, sizeof(mydata), 0, (struct sockaddr *)&serveraddr, clilen) < 0) { perror("send error : "); exit(0); } if (recvfrom(sockfd, (void *)&mydata, sizeof(mydata), 0, (struct sockaddr *)&serveraddr, clilen) < 0) { perror("recv error : "); exit(0); } printf("result is : %d\n", mydata.sum); close(sockfd); exit(0); }
Forums:
bind 하고 있는 소켓이 있어야 할 것 같네요.
bind 하고 있는 소켓이 있어야 할 것 같네요.
------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.
대충 돌게 만들자면 아래와 같겠습니다.server.c[code
대충 돌게 만들자면 아래와 같겠습니다.
server.c
client.c
댓글 달기