소켓프로그래밍 질문하나 올려요.
서버와 클라이언트 UDP통신 구현을 하고있는데요,
서버와 클라이언트 동시에 thread를 사용해서 통신하게 하려는데 해결이 잘 안되네요.
서버의 쓰레드에서 sendto를 함과 동시에 메인함수에서 소켓을통해 계속 필요없는 패킷이 들어오네요.
대략적인 코드도 올려봅니다.
client
while(1){
th_id = pthread_create(&p_thread, NULL, myFunc, (void *)th_data);
}
void *myFunc(void *data)
{
//broadcast
setsockopt(send_sock,SOL_SOCKET, SO_BROADCAST, (char*)&so_brd, sizeof(so_brd));
//데이터를 보냄
sendto(send_sock, buf,sizeof(buf),0,(struct sockaddr*)&broad_adr, sizeof(broad_adr));
//결과를 받아옴
recvfrom(send_sock,(char*)&buf,sizeof(buf),0,(struct sockaddr*)&broad_adr, &client_len);
}
server
while(1){
//UDP sock bind
recvfrom(recv_sock,(char*)&buf,sizeof(buf),0,(struct sockaddr*)&broad_adr, &client_len); //쓰레드의 sendto발생과 동시에 이부분 무한루프
th_id = pthread_create(&p_thread, NULL, myFunc, (void *)th_data);
}
void *myFunc(void *data)
{
//결과값 가져옴
sendto(recv_sock, buf,sizeof(buf),0,(struct sockaddr*)&broad_adr, sizeof(broad_adr));
}
이런식으로 구현을 해봤는데.. 해결법을 못찾았네요. 도움좀 받고싶습니다!.
제가 잘 몰라서 그런대
페킷이 들어왔는지 확인할 필요는 없는건가요?
어디부분에서 확인을 말씀하시는건지 ..
질문내용을 잘 이해를 못했네요 ㅜㅜ
데이터를 무한으로 읽어오는대
그 읽어오는 데이터의 유효성을 확인하지 않아도 되는가 에 대한 질문이였어요.
while(1) pthread_create(...);
while(1) pthread_create(...); 식으로 쓰레드를 무한으로 만드는 것이 의도하신 건가요?
금방 수백, 수천개 쓰레드가 만들어질 것 같은데요.....
클라이언트에도 있고 서버에도 있고... 어떻게 돌아갈 지 엄청 궁금하네요...
댓글 달기