TCP/IP/윈도우기반

TCP 파일 수신 서버<윈도우 기반>

꿀꿀이냐옹이 2009. 7. 1. 11:55
반응형

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <winsock2.h>

#include <time.h>// 시간구조체 가져오기

 

 

#pragma comment(lib, "ws2_32.lib")

 

         #define BUFSIZE 1024

 

void eh(char* meg);

 

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

{

            WSADATA wd;

            SOCKET hss;

            SOCKET hcs;

            SOCKADDR_IN sadd;

            SOCKADDR_IN cadd;

 

            FILE* fp;// 파일 포인터

            int scadd;// 클라이언트 주소크기변수

            int strl;//입력버프 크기

 

            char meg[BUFSIZE];

 

            char* str;// 클라이언트 주소저장 포인터

            time_t logint;// 시간형 변수 선언

            struct tm* t;// 시간구조체 변수 선언

 

            if(argc!=2)

                                          {

                                            printf("Usage : %s <port>\n",argv[0]);

                                            exit(1);

                                          }

 

           fp=fopen("recvclient.dat","w");// 파일 생성

           if(fp==NULL)

           eh("File open error");

 

           if(WSAStartup(MAKEWORD(2,2),&wd)!=0)

           eh("WSAStartup() error!");

 

           hss=socket(PF_INET,SOCK_STREAM,0);//서버소켓생성TCP

           if(hss==INVALID_SOCKET)

           eh("socket() error");

 

           memset(&sadd,0,sizeof(sadd));

           sadd.sin_family=AF_INET;

           sadd.sin_addr.s_addr=htonl(INADDR_ANY);

           sadd.sin_port=htons(atoi(argv[1]));

 

           if(bind(hss,(SOCKADDR*)&sadd,sizeof(sadd))==SOCKET_ERROR)

           eh("bind() error");

 

           if(listen(hss,5)==SOCKET_ERROR)

           eh("listen() error");

 

 

           scadd=sizeof(cadd);

           hcs=accept(hss,(SOCKADDR*)&cadd,&scadd);

 

           if(hcs==INVALID_SOCKET) 

           eh("accept() error"); 

 

           logint=time(NULL);//현재시간 저장

           t=localtime(&logint);//함수호출

 

           str=inet_ntoa(cadd.sin_addr);// 주소변환저장

           printf("NO%d  Client Address : %s\n",hcs,str);//주소출력

 

           printf("Login time : %2d:%02d:%02d\n",t->tm_hour,t->tm_min,t->tm_sec);//시간출력

 

           while((strl=recv(hcs,meg,BUFSIZE,0))!=0)//파일내용받고

                     fwrite(meg,sizeof(char),strl,fp);//쓰고

 

                     send(hcs,"Save file\n",10,0);//보내고

 

 

                     fclose(fp);

 

   

                     closesocket(hcs);

                     WSACleanup();

 

 return 0;

}

 

void eh(char* meg)

{

           fputs(meg,stderr);

           fputc('\n',stderr);

           exit(1);

}

반응형