UDP 소켓 임시 포트로 열어서 사용하려는데요...?

kkojiband의 이미지

예를 들어서,

UDP 를 사용해서 여러 클라이언트 프로그램에 메세지를 보내는 프로그램을 만든다고 할때요,

한 컴퓨터 내에서 여러 클라이언트를 사용하기 위해 임시 포트를 바인드 시켜주는 방식으로 하려고 합니다...

근데 클라이언트 마다 다른 고정 포트를 지정해줘서 사용을 하면 잘 되는데, 위와 같이 임시 포트를 바인드 시켜준 뒤, netstat 에서 포트 번호 확인해서 그 포트들로 메세지를 뿌려주면 메세지가 안갑니다...

스티븐슨씨 책도 보고 있는데, 당췌 왜 안되는지를 모르겠습니다...

주소와 포트 바인드 할때 포트 0으로 해줘서 임시 포트 바인드 해주면 안되는 이유라도 있나요? 왜 고정 포트를 꼭 지정을 해줘야할까요?

테스트를 위해 딴거없이 위의 것만 실행되도록해서 다른 문제는 없는듯합니다...

고수님들 도와주세요~ T.T

pynoos의 이미지

클라이언트의 포트를 서버에서 어떻게 아나요?

클라이언트가 0번으로 바인딩하면 할당되는 port 번호를 클라이언트는 몰라도 되고,
바인딩이 끝나면, 서버쪽에 고정된 포트에 sendto로 등록 packet을 임으로 만들어 보내면, 서버는 recvfrom 에서 상대의 포트를 알수 있습니다. 이 포트를 등록해놓으면, 나중에 서버쪽에서 메시지를 보낼일 있을때 사용하면 될 것 같습니다.

bw001730의 이미지

UDP 프로그램작성시..
보통 기본 UDP 프로그램이 아래와 같이 되겠죠

// 소켓생성
sock = socket(AF_INET, SOCK_DGRAM,0);

// servaddr 주소 세팅
bzero(&servaddr,addrlen);
servaddr.sin_family = AF_INET;
servaddr.sin_port   = htons(serv_port);
inet_pton(AF_INET, server_ip,&(servaddr.sin_addr));

// 첫번째 sendto 호출시...임의의 포트번호가 바인딩 됩니당
sendto(sock, buf, sizeof(buf), 0, 
             (struct sockaddr *)&servaddr,
             sizeof(servaddr)   );

이것은.... 자신의 주소에 0번 포트를 바인딩 한 효과와 동일합니다.

서버는 recvfrom()으로 읽어서,, 처음 메시지를 보낸 클라이언트라면
배열같은 저장소에 클라이언트의 IP주소 및 포트번호를를
저장하고 있으면 되겟쬬

아마도 님의 소스코드에 문제가 있지 않을까 하는 생각이 ..

함 소스 보여주세요

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.