답답하네요. sockaddr 소켓구조체 전송.
글쓴이: itexpert / 작성시간: 월, 2004/05/10 - 7:49오후
안녕하세요.
sockaddr_소켓 구조체를 send로 전송하는문제.
넘 어렵네요.
해두해두 안되구.
아래 구문과 같이 send로 sockaddr을 전송하였으나,
잘못된것 같습니다. 클라이언트에서
recv(s, (char *)&enter[num_chat], sizeof(enter[num_chat]), 0)
로 받았는데. 안되는군요.
어떻게 해야할지... 답변주시면 감사하겠습니다.
/* 채팅 클라이언트 목록에 추가 */ Client_s[num_chat] = client_fd; enter[num_chat]=client_addr; // 클라이언트주소구조체를 저장 num_chat++; send(client_s[num_chat], (char*)&enter[num_chat], sizeof(enter[num_chat]),0);
Forums:
[code:1]/* 채팅 클라이언트 목록에 추가 */ Client
' 형식이 내용을 규정한다. '
아..num_chat++은 없다구 치구여소켓구조체 전송시 (char*
아..num_chat++은 없다구 치구여
소켓구조체 전송시 (char*) 형으로 보내고
받을때도 (char*)형이 확실히 맞는건지요.
^^ 역시 그렇군여 더적을까하다가 말았는데..(void*)로 하시
^^ 역시 그렇군여 더적을까하다가 말았는데..
(void*)로 하시는게 맞을것같습니다..
그리고
포인터의 사용이 중요합니다..
혹시나.. sizeof(enter[num_chat]) 이함수가 제대로된 사이즈를
리턴하는지 체크를해보시길 권합니다.. enter가 포인터의 배열이라면..
제대로된 값을 보낼수 없습니다.. sizeof( struct sockaddr ) 과 같은
방식을 취해보세요..
딱보기엔.. 보낼만큼의 사이즈가 정확하기 않은것 같네요 ..
' 형식이 내용을 규정한다. '
답변감사합니다.struct sockaddr_in enter[MAX_S
답변감사합니다.
struct sockaddr_in enter[MAX_SOCK]; // 클라이언트들의 주소구조체선언
이구요
그렇다면,,
send,recv 둘다 형은 (void*)로 하고,
sizeof(struct sockaddr) 로 하면되나여?
흐음 struct sockaddr_in enter[MAX_SOCK];
흐음 struct sockaddr_in enter[MAX_SOCK];
이 포인터 배열이 아니네요? 그렇다면 쓰신방식이 맞습니다..
데이터가 제대로 전달되는지 일단 확인해보는게 좋겠군요..
' 형식이 내용을 규정한다. '
답변 정말 감사드립니다.ABCDE정확히 출력 되었습니다.이제 서버
답변 정말 감사드립니다.
ABCDE정확히 출력 되었습니다.
이제 서버로 부터 클라이언트의 접속정보를 받고
if(sendto(s2,line,strlen(line),0,(struct sockaddr *)&enter[i], sizeof(enter[i])) > 0){
printf("전송성공");}
이 실행되고 "전송성공"이란 메시지는 뜨지만.
클라이언트 창 하나 실행시켰거든요.
자기가 위에서 쏜 메시지가 돌아와야하는데.
성공이란메시지만 뜰뿐..메시지가 어디로 전송이된건지 난감하네요. ^^;;
좀 설명이 부족한듯 해보이네요..이번엔 sendto를 사용하셨는데
좀 설명이 부족한듯 해보이네요..
이번엔 sendto를 사용하셨는데 sendto는 UDP입니다..
사용용도가 정확한지 체크해보세요..
UDP는 특성상의 문제로 해깔리기 쉽습니다..
C/S 의 Simple Style 소스 예제를 참고하시기 바랍니다..
gogle이나 kldp 에서 찾아보시면.. 많이 있을듯합니다...
' 형식이 내용을 규정한다. '
댓글 달기