에코 서버를 찾아 들어오신분은 꼭 에코 클라이언트가 필요할것 같다는 생각에.. 없는 소스 짜서 올려봄니다.



#define BUFSIZE 1024
#define PORT 3000
#define IP "192.168.2.12"

// 해더파일 선언
#include <winsock2.h>
#include <iostream>

using namespace std;

// ws2_32.lib 링크
#pragma comment(lib, "ws2_32.lib")

class socketClient
{
private:
WSADATA wsaData;
SOCKET hSocket;
char message[BUFSIZE];
int strLen;
SOCKADDR_IN servAddr;
void ErrorHandling(char *message);

public:
int StartClient();

};

int socketClient::StartClient()
{
// 윈속 초기화 (성공시 0, 실패시 에러 코드리턴)
if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0){
ErrorHandling("WSAStartup() error!"); 
}

// 소켓 생성 (성공시 핸들을, 실패시 "INVALID_SOCKET" 반환)
hSocket=socket(PF_INET, SOCK_STREAM, 0);   
// 소켓 생성 실패 처리
if(hSocket == INVALID_SOCKET){
ErrorHandling("socket() error");
}

// 매모리 초기화
memset(&servAddr, 0, sizeof(servAddr));

// 소켓 통신을 위한 기본 정보 
servAddr.sin_family=AF_INET;
servAddr.sin_addr.s_addr=inet_addr(IP);
servAddr.sin_port=htons(PORT);

// 서버 커넥트
if(connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr))==SOCKET_ERROR){
ErrorHandling("connect() error!");
}

// 루프
while(1) {

cout<<"전송할 메시지를 입력하세요 (q to quit) : ";
cin>>message;

// q신호 일때 소켓을 끝냄
if(!strcmp(message,"q")) break;
// 메시지전송
send(hSocket, message, (int)strlen(message), 0);

// 메시지 수신
strLen=recv(hSocket, message, BUFSIZE-1, 0); /* 메시지 수신 */
// 받은 값의 끝에 널값을 붙임.
message[strLen]=0;
cout << message <<endl;
}

// 소켓 종류 신호전송
closesocket(hSocket);

// 할당 받은 리소스 반환.
WSACleanup();
return 0;
}

void socketClient::ErrorHandling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}




/************************************
/* 
/* main
/*
*/
int main(){

// 클라이언트 인스턴트
socketClient client;
// 시작
client.StartClient();
}
Posted by hengki