본문 바로가기

네트워크 프로그래밍

TCP/IP 파일 입출력 서버 프로그래밍!

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<winsock2.h>

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

 

#define BUFSIZE 30

void ErrorHandling(char *message);

 

int main(int argc, char **argv)

{

 WSADATA  wsaData;

 SOCKET  hServSock;

 SOCKET  hClntSock;

 char buf[BUFSIZE];

 

 FILE* fp;

 SOCKADDR_IN servAddr;

 SOCKADDR_IN clntAddr;

 int clntAddrSize;

 int len;

 

 fp = fopen("file_io_ser.cpp","r");

 if(fp == NULL)

  ErrorHandling("File open error");

 

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

  ErrorHandling("WSAStartup() error!");

 

 hServSock=socket(PF_INET, SOCK_STREAM, 0);

 if(hServSock == INVALID_SOCKET)

  ErrorHandling("socket() error");

 

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

 servAddr.sin_family=AF_INET;

 servAddr.sin_addr.s_addr=htonl(INADDR_ANY);

 servAddr.sin_port=htons(3000);

 

 if(bind(hServSock, (SOCKADDR*)&servAddr,sizeof(servAddr))==SOCKET_ERROR)

  ErrorHandling("bind() error");

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

  ErrorHandling("listen() error");

 

 clntAddrSize=sizeof(clntAddr);

 hClntSock=accept(hServSock, (SOCKADDR*)&clntAddr, &clntAddrSize);

 if(hClntSock==INVALID_SOCKET)

  ErrorHandling("accept() error");

 

 while(1){

  len=fread(buf, sizeof(char), BUFSIZE, fp);

  send(hClntSock, buf, len, 0);

  if(feof(fp))

   break;

 }

 if(shutdown(hClntSock, SD_SEND)==SOCKET_ERROR)

  ErrorHandling("shutdown error");

 

 len=recv(hClntSock, buf, BUFSIZE-1,0);

 buf[len]=0;

 fputs(buf, stdout);

 

 fclose(fp);

 closesocket(hClntSock);

 WSACleanup();

 return 0;

}

 

void ErrorHandling(char *message)

{

 fputs(message, stderr);

 fputc('\n',stderr);

 exit(1);

}