저 질문이 있습니다. socket programming인데요..

익명 사용자의 이미지

이번에 학교 수업 중에 socket을 이용한 chatting 프로그램을 짜는 프로젝트
가 있습니다.

수업에서 제공하는 서버는 솔라리스 유닉스 인데, 이곳에서 컴파일은 아주 잘
되고 실행도 잘 됩니다.

문제는 이 프로그램을 그대로 제 컴으로 옮겨와서 컴파일 시키려고 했는데 문
제가 발생했습니다.(제 컴은 wow linux 7.1이구 gcc는 2.96입니다.)

mydaytime.c를 컴파일 시킬때..

gcc -o mydaytime mydaytime.c -lsocket -lnsl

로 하라고 써 있어서 그대로 했는데 라이브러리가 없어서

컴파일이 안됐습니다.

그래서 뒤의 라이브러리 설정을 빼고 컴파일 했는데 에러는

없더군요..

그리고 실행을 했는데 실행이 제대로 되지 않았습니다.

혹시나 해서 다른 프로그램을 컴파일 시켰는데 실행되지 않더군요..

뭐가 잘 못된 건가요?

꼭 답변 부탁 드립니다.

익명 사용자의 이미지

그냥 쉽게 든 생각입니다.
솔라리스 워크스테이션이었다면, big endian byte order 일 겁니다.
x86 머쉰이면 little endian byte order 겠죠.
이게 원인일 수도 있을 겁니다.
아닐 가능성이 더 많겠죠. ㅡㅡ;
그냥 실행이 안된다고 말씀하시면 답변하기도 쉽지 않을 것 같네요...

익명 사용자의 이미지

안녕하세요

유닉스와 달리, 리눅스에서는

gcc -o mydaytime mydaytime.c -lsocket -lnsl
--------------
이부분을 안쓰셔도 컴파일됩니다. 컴파일할때 자동으로 옵션이
되는 것으로 알고있습니다.

그리고 왜 안되는지 소스를 올려주세요.

익명 사용자의 이미지

우선 답변에 감사 드립니다.

안돼는 이유는 잘 모르겠구요.. 솔라리스 유닉스에서는 이 프로그램을 실행시
키면 올바른 결과를 나타냅니다.

리눅스에서는 자꾸 연결할 수 없다고 하네요..

소스는 아래와 같습니다.
/*-----------------------------------------------------------------------
-------

------------------------------

파일명 mydaytime.c

기 능 daytime 서비스를 요구하는 TCP(연결형) 클라이언트

컴파일 gcc -o mydaytime mydaytime.c -lsocket -lnsl

실행예 mydaytime 163.152.46.118

-------------------------------------------------------------------------
-------

------------------------------ */

#include

#include

#include

#include

#define BUF_LEN 128

int main(int argc, char *argv[]) {

int s, n;

struct sockaddr_in server_addr;

char *haddr;

char buf[BUF_LEN+1];

if(argc != 2) {

printf("usage %s ip_address\n", argv[0]);

return -1;

}

haddr = argv[1];

/* 소켓 생성 */

if((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) {

printf("can't create socket\n");

return -1;

}

/* 서버의 소켓주소 구조체 server_addr을 '\0'으로 초기화 */

bzero((char *)&server_addr, sizeof(server_addr));

/* server_addr의 주소 지정 */

server_addr.sin_family = AF_INET;

server_addr.sin_addr.s_addr = inet_addr(haddr);

server_addr.sin_port = htonl(13);

/* 연결요청 */

if(connect(s, (struct sockaddr *)&server_addr, sizeof(server_addr))
< 0) {

printf("can't connect.\n");

return -1;

}

/* 서버가 보내오는 daytime 메세지의 수신 및 화면출력 */

while((n = read(s, buf, BUF_LEN)) > 0) {

buf[n] = '\0';

printf("%s", buf);

}

close(s);

}

----------------------------------------------------------------------
163.152.46.118은 수업에서 제공되는 server의 ip입니다.
이외에도 chatting 프로그램도 있는데 그것은 소스가 길어서요..
그럼.. 꼭 답변 부탁드립니다.

익명 사용자의 이미지

daytime의 포트가 막혀있을 겁니다.
열어주면 잘되겠죠.
daytime에도 버그가 있는지 필요하지 않다고 생각되는건 죄다 막아놨더군요.
xinetd을 사용하면 /etc/xinetd.d/daytime 의 disable = yes를
disable = no로 바꿔주면 됩니다.
물론 /etc/xinetd.daytime-udp도 바꿔주시면 UDP접속을 할 수 있죠.

익명 사용자의 이미지

감사 합니다.

echo program도 똑 같이 연결할 수 없다고 그러던데 그것도 포트가 막혀 있는
것인가요? 이런것에 대해서는 어떻게 해야 하는지요?

이런 정보는 어디에서 찾아야 하나요?

익명 사용자의 이미지

글쎄요... 찾아보니 echo도 서비스에 등록되어있군요. ^^;
대부분의 서비스는 /etc/services에 등록되어있습니다.
물론 이것은 제공할 수 있는 서비스와 포트 그리고 사용하는 통신 종류
(TCP/UDP)를
적어 놓은 곳입니다.
요즘은 xinetd을 많이 사용하고 예전에는 inetd을 사용하니 현재 사용하는
것을 man으로 보면 도움말이 나오겠죠.(저도 자세하게는 모르거든요. ^^;)
그리고 서비스를 열거나 닫는 방법은

/usr/share/doc/xinetd-2.3.0

의 문서중에(버젼은 틀릴 수가 있습니다.) sample.conf를 참고해서 만드시면
되겠네요.

댓글 달기

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