#include#include #pragma comment(lib, "wsock32.lib") void main(int argc, char *argv[]) { SOCKET s; WSADATA wsaData; struct sockaddr_in sin; char data[1024]; FILE *fp; int ret; int nRead; if(argc < 2){ printf("전송할 파일명을 입력하십시오.\n"); printf("ex)sample.exe file.txt\n"); return; } if( WSAStartup(WINSOCK_VERSION, &wsaData) != 0 ){ printf("WSAStartup 실패, 에러코드 = %d\n", WSAGetLastError()); return; } s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(s==INVALID_SOCKET){ printf("소켓 생성 실패, 에러코드 : %d\n", WSAGetLastError()); WSACleanup(); return; } sin.sin_family = AF_INET; sin.sin_port = htons(10000); sin.sin_addr.s_addr = inet_addr("127.0.0.1"); if(connect(s, (struct sockaddr*)&sin, sizeof(sin)) != 0){ printf("접속 실패, 에러코드 = %u\n", WSAGetLastError()); closesocket(s); WSACleanup(); } fp = fopen(argv[1], "rb"); if(fp==NULL){ perror("file open error"); closesocket(s); WSACleanup(); return; } while(1){ nRead = fread(data, 1, 1024, fp); if(ferror(fp)){ perror("file read error"); closesocket(s); WSACleanup(); fclose(fp); return; } ret = send(s, data, nRead, 0); if(ret == SOCKET_ERROR||ret!=nRead){ printf("데이터 송신 실패, 에러코드 = %u\n", WSAGetLastError()); closesocket(s); WSACleanup(); fclose(fp); return; } printf("%d bytes를 송신하였습니다.\n", ret); if(feof(fp)) break; } fclose(fp); printf("%s 파일을 전송하였습니다.\n", argv[1]); shutdown(s, SD_BOTH); if(closesocket(s)!=0){ printf("소켓 제거 실패, 에러코드 = %u\n", WSAGetLastError()); WSACleanup(); return; } if(WSACleanup() != 0){ printf("WSACleanup 실패, 에러코드 = %u\n", WSAGetLastError()); return; } }
Tip&Skill