#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void errorexit(char *);
BOOL parse(int, char **);
int socket_type = SOCK_STREAM;
char *server_name = "192.168.2.210"; // server adress
unsigned short port = 07;
int main(int argc, char **argv){
char Buffer[128];
int result;
unsigned int addr;
struct sockaddr_in server;
struct hostent *hp;
WSADATA wsaData;
SOCKET serve_socket;
if(parse(argc, argv)==FALSE)
exit(-1);
if((result = WSAStartup(0x202,&wsaData)) != 0)
errorexit("WSAStartup 실패\n");
if (port == 0) errorexit("사용법을 다시 보세요\n");
if(isalpha(server_name[0]))
hp = gethostbyname(server_name);
else{
addr = inet_addr(server_name);
hp = gethostbyaddr((char *)&addr, 4, AF_INET);
}
if(hp == NULL)
errorexit("%s 라는 주소를 구할 수 없음 \n");
memset(&server,0,sizeof(server));
memcpy(&(server.sin_addr),hp->h_addr,hp->h_length);
server.sin_family = hp->h_addrtype;
server.sin_port = htons(port);
serve_socket = socket(AF_INET,socket_type,0);
if(serve_socket < 0)
errorexit("소켓 열수 없음\n");
printf("%s 서버에 연결 성공\n",hp->h_name);
if(connect(serve_socket, (struct sockaddr*)&server, sizeof(server)) == SOCKET_ERROR)
errorexit("연결 실패\n");
wsprintf(Buffer,"클라이언트 테스트 중");
result = send(serve_socket, Buffer, sizeof(Buffer), 0);
if(result == SOCKET_ERROR)
errorexit("전송 실패\n");
printf("보낸 데이터 [%s]\n",Buffer);
result = recv(serve_socket, Buffer, sizeof(Buffer), 0);
if(result == SOCKET_ERROR) {
fprintf(stderr,"recv() 실패\n");
closesocket(serve_socket);
WSACleanup();
return -1;
}
if (result == 0){
printf("서버 연결을 닫음\n");
closesocket(serve_socket);
WSACleanup();
return -1;
}
printf("데이터 수신 성공 : %s\n",Buffer);
closesocket(serve_socket);
WSACleanup();
exit(0);
}
BOOL parse(int argc, char **argv){
int i;
if(argc > 1){
for(i=1; i < argc; i++){
if((argv[i][0] == '-') || (argv[i][0] == '/')){
switch(tolower(argv[i][1])){
case 'p':
if(!stricmp(argv[i+1], "TCP"))
socket_type = SOCK_STREAM;
else if(!stricmp(argv[i+1],"UDP"))
socket_type = SOCK_DGRAM;
else{
fprintf(stderr,"사용법 : %s -p [protocol] -s [server] -n[port num]\n",argv[0]);
return FALSE;
}
i++;
break;
case 's':
server_name = argv[i++];
break;
case 'n':
port = atoi(argv[i++]);
break;
default:
fprintf(stderr,"사용법 : %s -p [protocol] -s(server) -n[port num]\n",argv[0]);
return FALSE;
}
}
else{
fprintf(stderr,"사용법 : %s -p [protocol] =s [server] -n [port num]\n",argv[0]);
return FALSE;
}
}
}
}
void errorexit (char *err_msg){
fprintf(stderr, err_msg);
WSACleanup();
exit(-1);
}
'공부 해 Boa요. > Network' 카테고리의 다른 글
Client (0) | 2006.10.15 |
---|---|
Raw Socket (0) | 2006.09.29 |
실전 네트웍 프로그래밍 - 4 - IOCP Echo Server (0) | 2005.06.29 |
'실전 네트웍 프로그래밍 -3 (0) | 2005.06.29 |
'실전 네트웍 프로그래밍 - 2 (0) | 2005.06.29 |