답답해죽을꺼 같습니다 @.@ 소켓통신

soylove의 이미지

어제 질문을 올렸더니 많은 분이 답변을 주셨는데요.. 여전히 안되서요...혹시 서버쪽에 문제때문인지 싶어 서버쪽, 클라이언트쪽 소스를 모두 올려봅니다
도움좀 주세요.. 만 하루째 이거가지구 씨름중...ㅡ.ㅡ;;;;;
에러는 전혀 없는데
서버를 수행 ./soc1(이게 서버파일실행소스입니다)하고나서
./soc4(클라이언트소스)하면 클라이언트쪽에서 connect가 제대로 안될때 프린트하는 "no"가 출력됩니다..

도움좀 주십쇼..;;;;

/*******서버쪽**********/
/* simple socket program*/
//This is server side

#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>

#define SERVICE_TCP_PORT 333 //port for socket communication

int main(){
int sockfd;
int childpid;
char data[10];
char reply[20] = "I got the message";

int newsockfd;

struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); //for the first_example
serv_addr.sin_port = htons(SERVICE_TCP_PORT);

if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1 )
printf("error in sockfd\n");

if(bind(sockfd,(struct sockaddr*)&serv_addr, sizeof(struct sockaddr_in) == 1))
printf("binding is ok\n");
else
printf("bind no\n");

if(listen(sockfd,3) == -1)
printf("listening is no\n");
else printf("listening is ok\n");
for( ; ; ){
printf("here is in for loop\n");
newsockfd = accept(sockfd, NULL, NULL);
if(newsockfd == -1)
printf("ERROR: Creating new socket");
if(childpid = fork() < 0 )
printf("ERROR: Creating child process");
else if(childpid == 0)
{
printf("client comes here\n");

close(newsockfd);
}
} //end for( ; ; )
}

/*******클라이언트쪽**********/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>

#define SERVER_TCP_PORT 333
#define SERVER_HOST_ADDR "127.0.0.1"

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>

#define SERVER_TCP_PORT 333
#define SERVER_HOST_ADDR "127.0.0.1"

int main()
{
int cli_sockfd,clilen;
char data[10]="0.05 9";
char reply[20] = "heheheheh";
struct sockaddr_in cli_addr;
clilen = sizeof(struct sockaddr_in);

memset(&cli_addr, 0, sizeof(cli_addr));
cli_addr.sin_family = AF_INET;
cli_addr.sin_addr.s_addr = inet_addr(SERVER_HOST_ADDR);
cli_addr.sin_port = htons(SERVER_TCP_PORT);

if((cli_sockfd = socket(AF_INET,SOCK_STREAM,0))<0)
printf("error in clisockfd\n");
else
printf("good in cli_sockfd\n");

printf("%d is cli_sockfd\n",cli_sockfd);
if(connect(cli_sockfd,(struct sockaddr*)&cli_addr,sizeof(struct sockaddr_in))== -1)
printf("no! \n");
else printf("yes! \n");
}

서지훈의 이미지

서버를 실행 시킨 후 netstat로 제대로 listenning하고 있는지 확인을 해보세요.
그리고 connect프로그램 말고 telnet으로 일단 서버에 문제 없이 붙는지 확인도 해보셔야 할듯 하네요.
이게 서버 문제인지 클라이언트 문제 인지 먼저 확실한 확인이 필요할 듯 하군요.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

ez8의 이미지

간단합니다. 오타나셨군요 :)

soylove wrote:

if(bind(sockfd,(struct sockaddr*)&serv_addr, sizeof(struct sockaddr_in) == 1))

면 addrlen 이 항상 0 이 되겠습니다.

if(bind(sockfd, (struct sockaddr*)&serv_addr, sizeof(struct sockaddr_in)) != -1)

로 고치시고, 아마 root 권한이 아니면 서버 프로그램에서 333 포트로 bind 가 안 될겁니다.

soylove의 이미지

서버의 bind에 괄호가 짝이 잘못 맞춰졌어요..ㅜ.ㅜ
그리구 bind가 잘되면 0이 반환되고 잘못되면 -1이 반환된다고 하더군요

이 노므 괄호하나때매 만 하루를 끙끙댄걸 생각하면 ㅠ0ㅠ;;;

익명 사용자의 이미지

누구나 한번씩 격을 만한 강력한 논리적 오류죠 ㅋ.

댓글 달기

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