답답하네요. sockaddr 소켓구조체 전송.

itexpert의 이미지

안녕하세요.
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);
liongo의 이미지

/* 채팅 클라이언트 목록에 추가 */ 
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);

' 형식이 내용을 규정한다. '

itexpert의 이미지

아..num_chat++은 없다구 치구여
소켓구조체 전송시 (char*) 형으로 보내고
받을때도 (char*)형이 확실히 맞는건지요.

liongo의 이미지

^^ 역시 그렇군여 더적을까하다가 말았는데..

(void*)로 하시는게 맞을것같습니다..

그리고

send(client_s[num_chat], (char*)&enter[num_chat], sizeof(enter[num_chat]),0);

포인터의 사용이 중요합니다..

혹시나.. sizeof(enter[num_chat]) 이함수가 제대로된 사이즈를

리턴하는지 체크를해보시길 권합니다.. enter가 포인터의 배열이라면..

제대로된 값을 보낼수 없습니다.. sizeof( struct sockaddr ) 과 같은

방식을 취해보세요..

딱보기엔.. 보낼만큼의 사이즈가 정확하기 않은것 같네요 ..

' 형식이 내용을 규정한다. '

itexpert의 이미지

답변감사합니다.
struct sockaddr_in enter[MAX_SOCK]; // 클라이언트들의 주소구조체선언
이구요
그렇다면,,
send,recv 둘다 형은 (void*)로 하고,
sizeof(struct sockaddr) 로 하면되나여?

liongo의 이미지

흐음 struct sockaddr_in enter[MAX_SOCK];

이 포인터 배열이 아니네요? 그렇다면 쓰신방식이 맞습니다..

send(client_s[num_chat], (void*)&enter[num_chat], sizeof(enter[num_chat]),0); 

데이터가 제대로 전달되는지 일단 확인해보는게 좋겠군요..

char test_array[5];

strcpy( test_array, "ABCDE" );
send( client_s[num_chat], (void*)test_array, sizeof(test_array),0);

받는쪽
int n = 0;
char test_array[6]; 

memset( test_array, 0x0, sizeof( test_array );

n = recv(s, (void*)test_array, sizeof( test_array ), 0) 

printf("RECV: size = %d, string = %s\n",n , test_array );


결과 에 size는 5 string에 ABCDE가 와야지 정상입니다..

아고 온란상에서 코드 적으니 힘드네요 그럼.

' 형식이 내용을 규정한다. '

itexpert의 이미지

답변 정말 감사드립니다.
ABCDE정확히 출력 되었습니다.
이제 서버로 부터 클라이언트의 접속정보를 받고
if(sendto(s2,line,strlen(line),0,(struct sockaddr *)&enter[i], sizeof(enter[i])) > 0){
printf("전송성공");}
이 실행되고 "전송성공"이란 메시지는 뜨지만.
클라이언트 창 하나 실행시켰거든요.
자기가 위에서 쏜 메시지가 돌아와야하는데.
성공이란메시지만 뜰뿐..메시지가 어디로 전송이된건지 난감하네요. ^^;;

liongo의 이미지

좀 설명이 부족한듯 해보이네요..

이번엔 sendto를 사용하셨는데 sendto는 UDP입니다..

사용용도가 정확한지 체크해보세요..

UDP는 특성상의 문제로 해깔리기 쉽습니다..

C/S 의 Simple Style 소스 예제를 참고하시기 바랍니다..

gogle이나 kldp 에서 찾아보시면.. 많이 있을듯합니다...

' 형식이 내용을 규정한다. '

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.