socket 프로그래밍 질문 드립니다

홍지민@Naver의 이미지

서버와 클라이언트간의 간단한 메시지 송수신 소스이며 아래와 같습니다

서버(ip:218)에서 [server] 바이너리 파일 실행 후

클라이언트(ip:221)에서 [client] 바이너리 파일 실행 시 "accept () error" 라고 발생하여, perror로 확인해보니

Connection refused 에러가 발생합니다

그래서 연결상태,포트,확인 시 이상이 없었으며 서버에서 바이너리 파일 실행 중 클라이언트에서 telnet으로 (ip:218) 접근 시 작성한 메시지(hello world)가 발생합니다

어느 부분을 확인해야될지 잘 모르겠어서 질문 드립니다

* server.c *

int main()
{
        int serv_sock;
        int clnt_sock;
        struct sockaddr_in serv_addr;
        struct sockaddr_in clnt_addr;
        int clnt_addr_size;
        char message[]="Hello Word!\n";
 
        /* 서버 소켓 생성 */
        serv_sock = socket(PF_INET, SOCK_STREAM, 0);
        if(serv_sock ==-1)
                error_handling("socket() error");
 
        memset(&serv_addr,0,sizeof(serv_addr));
        serv_addr.sin_family = AF_INET;
        serv_addr.sin_addr.s_addr = htonl( INADDR_ANY);
        serv_addr.sin_port = htons(9999);
 
        /* 소켓에 주소 할당 */
        if(bind(serv_sock,(struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1)
                error_handling("bind() error");
 
        /* 연결 요청  대기상태로 진입 */
        if(listen(serv_sock,5) == -1)
                error_handling("listen() error");
 
        /* 연결 요청 수락 */
        clnt_addr_size = sizeof(clnt_addr);
        clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
        if(clnt_sock == -1)
                error_handling("accpet() error");
 
 
 
* client.c *
<code>
int main(void)
{
        int sock;
        struct sockaddr_in serv_addr;
        char message[30];
        int str_len;
 
        /* 서버 접속을 위한 소켓 생성 */
        sock = socket(PF_INET, SOCK_STREAM, 0);
        if(sock == -1)
                error_handling("socket() error");
 
        memset(&serv_addr, 0, sizeof(serv_addr));
        serv_addr.sin_family = AF_INET;
        serv_addr.sin_addr.s_addr = inet_addr("127.0.0.0");
        serv_addr.sin_port - htons(9999);
 
        /* 서버로 부터 연결 요청 */
        if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1)
        perror("무슨 에러인가요?");
//      printf( "Error opening file: %s\n", strerror( errno ) );
        error_handling("connect() error");
 
        /* 데이터 수신 */
        str_len = read(sock,message,sizeof(message)-1);
        if(str_len == -1)
                error_handling("accept() error");
        message[str_len] = 0;
        printf("message from server : %s \n", message);
 
        /* 연결 종료 */
        close(sock);
 
        return 0;
 
}

pynoos의 이미지

iptables -L 을 이용하여 혹시 외부에서 접근하는 port가 차단되어 있는지 확인해보세요.
또한 strace ./client 로 실행해서 실제 어떻게 접속이 되고 있는지 확인해보시고,
다른 창에 sudo tcpdump -i eth0 혹은 sudo tcpdump -i lo 로 packet 지나가는 것을 확인해보세요.

twinwings의 이미지

만약 동일머신에서 실행했는데 잘 동작하면, 네트워크 설정 문제일 확률이 높습니다. 프록시환경, pat, 방화벽 등.

또는 클러이언트 측에서 서버로 netcat을 이욘해서 해당 포투가 열려있는지 확인해 보새요

twinwings의 이미지

만약 동일머신에서 실행했는데 잘 동작하면, 네트워크 설정 문제일 확률이 높습니다. 프록시환경, pat, 방화벽 등.

또는 클러이언트 측에서 서버로 netcat을 이욘해서 해당 포투가 열려있는지 확인해 보새요

...의 이미지

client.c 소스 코드에 오타가 하나 보이네요.
컴파일 경고가 나왔을텐데 무시하면 안되죠.
힌트를 드리면 포트를 설정하지 않고 접속하려 하니 오류가 나는 겁니다.

댓글 달기

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