udp server program 내의 htonl(INADDR_ANY) 에 대한 문의 ...
글쓴이: air74 / 작성시간: 목, 2004/10/14 - 10:27오전
안녕하세요.
udp server 부분을 만들어 보고 있는데 질문이 있습니다.
1. 서버에서는 src addr 초기화 할때 반드시 SrcAddr.sin_addr.s_addr = htonl(INADDR_ANY);
이런 형태로 해주어야 하나요? 그냥 client 처럼 자기 src ip 로 설정을 해주면 안 되나요?
2. 서버쪽에선 recv 후 알게 되는 수신 socket 으로 sendto 하면 되기 때문에 따로 client socket 에 대한 초기화 및 기타 작업을 해줄 필요는 없을거 같은데 제가 생각 하는것이 올바른 가요?
3. udp socket 의 경우 여러 thread 가 하나의 socket 을 사용해도 문제 될것 없다고 생각 하는데 제대로 이해 하고 있는 것인지 궁금 합니다.
항상 고수님들의 답변에 감사하고 있습니다.
Forums:
IP를 직접 설정하셔도 되는데 서버IP가 바뀔때마다IP를 다시 입력해
IP를 직접 설정하셔도 되는데 서버IP가 바뀔때마다
IP를 다시 입력해주고 컴파일 하거나...
아규먼트로 서버의 IP를 줘야하는 불편이 있겠네요.
랜카드가 1나 이상일 경우는 또 다르게 해줘야겠죠.
모든 IP로부터 동일 포트에 대해서 데이터를 받을건지..
아니면 하나의 IP를 지정해서 받을건지..
서버쪽에서 recv 후가 아니라 accept 후 일것 같구요.
udp뿐만 아니라 tcp도 여러 thread가 하나의 소켓을 사용해도 문제가 없습니다.
서버 규모가 조금 커지면 recv thread 와 send thread 를 따로 하는 구조를 많이 택합니다.
------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.
1. SrcAddr.sin_addr.s_addr = htonl(INADD
1. SrcAddr.sin_addr.s_addr = htonl(INADDR_ANY);
소켓을 만들 때 이렇게 해주셔야 어떤 주소에서 오든 받아 들이게 됩니다.
그렇지 않고 특정 주소를 사용하게 되면...
그 주소에선 온 접속만 받아들이게 됩니다.
2. 여기에 대한 질문은 질문의 의도가 좀 모호하군요.
서버쪽에서 receive 했다고 한다면...
클라이언트에서 접속하고 무언가를 보냈다는 것인데, 초기화가 필요한 이유가?
이미 모든 초기화 작업을 한 후에 접속이 된건데...
3. 네... 이때문에 멀티프로세스로 구성을 하는 것이니 만큼...
각 쓰레드는 동일한 소켓을 사용하게 해야합니다.
그럼... 좋은 하루 되시길...
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
댓글 달기