급!!!!!! TCP/IP를 이용한 채팅 프로그램 소스(Server, Client ) 수정 좀 부탁드려요..

-.-의 이미지

다음 소스는 TCP/IP를 이용하여 구현한 채팅 프로그램 소스로,
리눅스를 기반. C언어를 사용하였습니다.
Client가 write한것을 Server가 read한 후 Server가 다시 Write로 Client에게 read(응답)하게 하고 싶어요.
이것을 printf("")로해서 출력하고 싶은데 어떻게 할까요..
그리고 Client의 기능에 login기능을 추가하고싶은데 어떻게 하면 좋을까요?
다음을 참고해서 수정좀 부탁드리겠습니다!

***************************** Server *****************************

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
 
void error_handling(char *message);
 
int main(int argc, char **argv)
{
    int serv_sock;
    int clnt_sock;
    int nPort = 8800;
    struct sockaddr_in serv_addr;
    struct sockaddr_in clnt_addr;
    int clnt_addr_size;
 
    if(argc!=2)
    {
        nPort = atoi(argv[1]);
        printf( "Port : %d\n", nPort);
    }
 
    serv_sock=socket(PF_INET, SOCK_STREAM, 0);
    printf("채팅방 생성.\n");
 
    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(nPort);
 
    if( bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1)
    {
        printf("서버가 생성 되었습니다. \n", serv_sock);
        error_handling("bind() error");
    }
 
    if( listen(serv_sock, 5)==-1 )
        error_handling("listen() error");
 
    clnt_addr_size=sizeof(clnt_addr);
 
    for(; ;)
    {
        clnt_sock=accept(serv_sock, (struct sockaddr*) &clnt_addr, &clnt_addr_size);
        if(clnt_sock==-1)
        {
            error_handling("accept() error");
        }
 
        printf( "클라이언트가 접속 하였습니다.\n");
    }
 
 
    if( read(clnt_sock, (struct sockaddr*)&clnt_addr, sizeof(clnt_addr))==-0)
        error_handling("read() error");
        printf("%s > \n");
 
    if( write(clnt_sock, (struct sockaddr*)&clnt_addr, sizeof(clnt_addr))==-0)
        error_handling("write() error");
        printf("%s < \n");
 
    close(clnt_sock);
 
    return 0;
}
 
void error_handling(char *message)
{
    fputs(message, stderr);
    fputc('\n', stderr);
    exit(1);
}

***************************** Client *****************************

#include <sys/socket.h>
 
void error_handling(char *message);
 
int main(int argc, char **argv)
{
    int sock;
    char message[30];
    int str_len;
 
    struct sockaddr_in serv_addr;
 
    if(argc!=3)
    {
        printf("User : %s <IP> <PORT>\n", argv[2]);
        exit(1);
    }
 
    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(argv[1]);
    serv_addr.sin_port=htons(atoi(argv[2]));
 
    if( connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1)
        error_handling("connect() error!");
 
    str_len=read(sock, message, sizeof(message)-1);
    if (str_len==-1)
        error_handling("read() error!");
    message[str_len]=0;
    printf("From Server : %s \n", message);
    close(sock);
}
 
void error_handling(char *message)
{
    fputs(message, stderr);
    fputc('\n', stderr);
    exit(1);
}
익명 사용자의 이미지

첫째로 말도 안되는 광범위한 범위의 질문 (예를들어 윈도우 어케써요? 이런질문 좀 비약적이긴 하지만 이와같은류의 질문을 모두 포함)
둘째로 해달라는 질문 특히 님께서 한 것이 해달라는 질문입니다. 이게 뭔뜻이냐면 당연히 해달라는 뜻을 어떻게 해석하냐인데 님꼐선 일방적 해달라 특히 숙제를 대신해달라하는 뉘앙스가 아주 뚜렷한 질문입니다. 이런 것은 님한테도 안좋아요

로그인 기능은 디비등을 써서 아이디 비번을 관리해야 하는 기능이구요 물론 배열같은데 몇개 아이디만 정적으로 올려서 쓰실게 아니라면

채팅 본질에 대한 질문도 거의 근접하셨는데 read에서 이렇게 해서 이렇게 했는데 왜 안읽힐가요 하는 질문과 채팅을 하게 해주세요 이 질문이 잘못됬다는겁니다.

snowall의 이미지

급한 건이라면 돈을 걸어보심이 어떨까요

피할 수 있을때 즐겨라! http://melotopia.net/b

익명 사용자의 이미지

돈돈돈돈돈돈돈!!! 나쁜 버릇이예요.
이런거에 돈을 걸라고 하다니.

런맨의 이미지

답변을 바라지 마라는 뜻인거 같습니다.ㅎㅎㅎ

인생은 도박이다.

snowall의 이미지

급하면 돈이라도 걸어야죠. 원래 일정과 비용은 반비례합니다.

피할 수 있을때 즐겨라! http://melotopia.net/b

익명 사용자의 이미지

모르는걸 물어보셔야지.
수정해달라는건 뭐죠??

저거 학부 2학년 1학기 정도 수준이면
짜고도 남습니다.

더 공부하시고, 모르는걸 물어보시죠?

익명 사용자의 이미지

왠만하면 How to ask questions - the smart way 라는 문서라도 권해드리려고 했으나
회원 가입 이력과 발자취를 보니 그 마음도 싹 사라지네요.
인터넷 게시판을 활용하는 것은 나쁘지 않겠지만 이건 너무 노골적인 '이용'목적 아닌가 싶네요.
이런 답글조차도 이용당한다는 느낌이 들 정도예요.
글 쓴 분 국정원 직원인가요? 아이디 한 수십개 만들어서 활동하는?

댓글 달기

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