본문 바로가기
코스웨어/16년 스마트컨트롤러

20160418_장진웅_업무일지_공장내Network_일대일통신3

by 알 수 없는 사용자 2016. 4. 18.
728x90
반응형


6페이지. 모든 패킷 전송에 대한 응답확인 이라는 뜻은 전송하기 쉽게 분리 했던 패킷들을 전송한 뒤 합친다.

패킷에 일련번호라는 뜻은 각각의 패킷에 번호를 부여해서 들어오는 순서대로 각각의 위치에 배정한다.

7페이지. 그림에서 T를 확대해 놓은 것이다.

8페이지. 위의 그림을 눕혀 놓은 것이라고 쉽게 생각하면 된다.





이번의 채팅 프로그램은 클라이언트를 만들지 않고 서버만으로 채팅 프로그램을 만들기 입니다.

tcp.h

#ifndef __TCP_H__
#define __TCP_H__

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

#define BSIZE 250
#define IP_SERVER "192.168.1.60"
#define PORT 10000

#endif //__TCP_H__


server.c

#include "tcp.h"

int main(void)
{
    int iSSock;
    int iCSock;
    int iRet;
    int iLen;
    char caBuff[BSIZE];

    struct sockaddr_in stServer;
    struct sockaddr_in stClient;

    iSSock=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    if(iSSock<0)
    {
        printf("can not make a socket \n");
        perror("iSSock");
        return 0;
    }

    bzero(&stServer, sizeof(stServer));

    stServer.sin_family = AF_INET;
    stServer.sin_addr.s_addr = INADDR_ANY;
    //stServer.sin_port = htons(PORT);

    stServer.sin_port = htons(PORT);

    iRet=bind(iSSock, (struct sockaddr *)&stServer, sizeof(stServer));

    if(iRet==-1)
    {
        printf("binding error \n");
        perror("bind");
        return 0;
    }

    iRet=listen(iSSock, 5);

    if(iRet==-1)
    {
        printf("listen error \n");
        perror("listen");
        close(iSSock);
        return 0;
    }

    iLen=sizeof(stClient);

    iCSock=accept(iSSock, (struct sockaddr *)&stClient, &iLen);

    if(iCSock==-1)
    {
        printf("accept error \n");
        perror("accept");
        close(iSSock);
        return 0;
    }

    iRet=read(iCSock , caBuff, BSIZE);
 
    putchar('[');
    write(1,caBuff,iRet);
    printf("] \n");

    write(iCSock, "TEST", 4);
    close(iCSock);

    return 0;
}

<출력결과>

이렇게 나옵니다... 대괄호 안에 들어가야 되는데 안들어가서 최대한 빨리 원인을 찾도록 하겠습니다...ㅠㅠ

telnet 192.168.1.60 10000 이라는 명령어 만으로도 클라이언트.exe를 대체할 수 있습니다.


<해당파일>

 server.c

 tcp.h


728x90