728x90
------------ 클라이언트 -----------
// client.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
//
#include "stdafx.h"
#include "client.h"
#include "client.h"
#include "stdio.h"
#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "ws2_32.lib")
#define DESIRED_WINSOCK_VERSION 0x0202
#define MINIMUM_WINSOCK_VERSION 0x0001
#define MINIMUM_WINSOCK_VERSION 0x0001
#define MAXBUF 256
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define new DEBUG_NEW
#endif
// 유일한 응용 프로그램 개체입니다.
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
{
int nRetCode = 0;
// MFC를 초기화합니다. 초기화하지 못한 경우 오류를 인쇄합니다.
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
_tprintf(_T("심각한 오류: MFC를 초기화하지 못했습니다.\n"));
nRetCode = 1;
}
else
{
// TODO: 응용 프로그램의 동작은 여기에서 코딩합니다.
SOCKET m_client_socket;
WSADATA wsadata;
struct sockaddr_in server_addr;
char buffer[MAXBUF] = {0, };
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
_tprintf(_T("심각한 오류: MFC를 초기화하지 못했습니다.\n"));
nRetCode = 1;
}
else
{
// TODO: 응용 프로그램의 동작은 여기에서 코딩합니다.
SOCKET m_client_socket;
WSADATA wsadata;
struct sockaddr_in server_addr;
char buffer[MAXBUF] = {0, };
// 소켓을 초기화
if(!WSAStartup(DESIRED_WINSOCK_VERSION, &wsadata)){
if(wsadata.wVersion < MINIMUM_WINSOCK_VERSION){
WSACleanup();
exit(1);
}
}
if(!WSAStartup(DESIRED_WINSOCK_VERSION, &wsadata)){
if(wsadata.wVersion < MINIMUM_WINSOCK_VERSION){
WSACleanup();
exit(1);
}
}
// 소켓을 생성
m_client_socket = socket(PF_INET, SOCK_STREAM, 0);
if(m_client_socket == INVALID_SOCKET){
printf("socket error : ");
WSACleanup();
exit(1);
}
m_client_socket = socket(PF_INET, SOCK_STREAM, 0);
if(m_client_socket == INVALID_SOCKET){
printf("socket error : ");
WSACleanup();
exit(1);
}
// 소켓이 접속할 주소 지정
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(2100);
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(2100);
// 지정한 주소로 접속
if(connect(m_client_socket, (LPSOCKADDR)&server_addr, sizeof(server_addr)) != 0)
{
printf("connect error : ");
exit(1);
}
if(connect(m_client_socket, (LPSOCKADDR)&server_addr, sizeof(server_addr)) != 0)
{
printf("connect error : ");
exit(1);
}
bool running = true;
while (running)
{
// 데이터 처리
if(recv(m_client_socket, buffer, MAXBUF, 0) <= 0)
printf("Recv error\n");
else
printf("Recv : %s\n", buffer);
while (running)
{
// 데이터 처리
if(recv(m_client_socket, buffer, MAXBUF, 0) <= 0)
printf("Recv error\n");
else
printf("Recv : %s\n", buffer);
getchar();
if(send(m_client_socket, buffer, MAXBUF, 0) <= 0)
printf("send error : %s\n", buffer);
else
printf("send : %s\n", buffer);
}
if(send(m_client_socket, buffer, MAXBUF, 0) <= 0)
printf("send error : %s\n", buffer);
else
printf("send : %s\n", buffer);
}
// 소켓을 닫음
closesocket(m_client_socket);
closesocket(m_client_socket);
// 받아온 문자열을 화면에 출력
printf("\nrecv : %s\n\n", buffer);
return 0;
printf("\nrecv : %s\n\n", buffer);
return 0;
}
return nRetCode;
}
}
------------ 서 버 -----------
// server.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
//
#include "stdafx.h"
#include "server.h"
#include "server.h"
#include "stdio.h"
#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "ws2_32.lib")
#define DESIRED_WINSOCK_VERSION 0x0202
#define MINIMUM_WINSOCK_VERSION 0x0001
#define MINIMUM_WINSOCK_VERSION 0x0001
#define MAXBUF 256
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 유일한 응용 프로그램 개체입니다.
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
{
int nRetCode = 0;
// MFC를 초기화합니다. 초기화하지 못한 경우 오류를 인쇄합니다.
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
_tprintf(_T("심각한 오류: MFC를 초기화하지 못했습니다.\n"));
nRetCode = 1;
}
else
{
// TODO: 응용 프로그램의 동작은 여기에서 코딩합니다.
SOCKET m_client_sock, m_listen_sock; // 소켓 디스크립트 정의
WSADATA wsadata;
struct sockaddr_in client_addr, server_addr;
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 오류 코드를 필요에 따라 수정합니다.
_tprintf(_T("심각한 오류: MFC를 초기화하지 못했습니다.\n"));
nRetCode = 1;
}
else
{
// TODO: 응용 프로그램의 동작은 여기에서 코딩합니다.
SOCKET m_client_sock, m_listen_sock; // 소켓 디스크립트 정의
WSADATA wsadata;
struct sockaddr_in client_addr, server_addr;
// 클라이언트에 보내줄 문자열
char buffer[MAXBUF] = "I like you!"; int clen;
int i = 0;
char buffer[MAXBUF] = "I like you!"; int clen;
int i = 0;
// 소켓을 초기화
if(!WSAStartup(DESIRED_WINSOCK_VERSION, &wsadata)){
if(wsadata.wVersion < MINIMUM_WINSOCK_VERSION){
WSACleanup();
exit(1);
}
}
if(!WSAStartup(DESIRED_WINSOCK_VERSION, &wsadata)){
if(wsadata.wVersion < MINIMUM_WINSOCK_VERSION){
WSACleanup();
exit(1);
}
}
// 서버 소켓 생성
m_listen_sock = socket(AF_INET, SOCK_STREAM, 0);
if(m_listen_sock == INVALID_SOCKET){
printf("socket error : ");
WSACleanup();
exit(1);
}
m_listen_sock = socket(AF_INET, SOCK_STREAM, 0);
if(m_listen_sock == INVALID_SOCKET){
printf("socket error : ");
WSACleanup();
exit(1);
}
clen = sizeof(server_addr);
// 주소 구조체에 주소 지정
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(2100); // 사용할 포트번호
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_port = htons(2100); // 사용할 포트번호
// bind 함수를 사용하여 서버 소켓의 주소 설정
if(bind(m_listen_sock, (LPSOCKADDR)&server_addr, sizeof(server_addr)) == SOCKET_ERROR){
printf("bind error : ");
WSACleanup();
exit(1);
}
if(bind(m_listen_sock, (LPSOCKADDR)&server_addr, sizeof(server_addr)) == SOCKET_ERROR){
printf("bind error : ");
WSACleanup();
exit(1);
}
// 위에서 지정한 주소로 클라이언트 접속을 기다림
if(listen(m_listen_sock, 1) != 0) {
printf("listen error : ");
exit(1);
}
if(listen(m_listen_sock, 1) != 0) {
printf("listen error : ");
exit(1);
}
bool running = true;
while(running)
{
// 클라이언트가 접속하면 접속을 허용하고 클라이언트 소켓을 생성함
m_client_sock = accept(m_listen_sock, (LPSOCKADDR)&client_addr, &clen);
if(m_client_sock != INVALID_SOCKET)
{
printf("=== 접속 완료 ===\n");
while(running)
{
// 클라이언트가 접속하면 접속을 허용하고 클라이언트 소켓을 생성함
m_client_sock = accept(m_listen_sock, (LPSOCKADDR)&client_addr, &clen);
if(m_client_sock != INVALID_SOCKET)
{
printf("=== 접속 완료 ===\n");
while(1)
{
// 클라이언트로 buf에 있는 “I like you!" 문자열 전송
if(send(m_client_sock, buffer, MAXBUF, 0) <= 0)
printf("send error : %s\n", buffer);
else
printf("send : %s\n", buffer);
{
// 클라이언트로 buf에 있는 “I like you!" 문자열 전송
if(send(m_client_sock, buffer, MAXBUF, 0) <= 0)
printf("send error : %s\n", buffer);
else
printf("send : %s\n", buffer);
if(recv(m_client_sock, buffer, MAXBUF, 0) <= 0)
printf("recv error : %s\n", buffer);
else
printf("recv : %s\n", buffer);
}
}
}
// 클라이언트 소켓을 닫음
closesocket(m_client_sock);
return 0;
}
closesocket(m_client_sock);
return 0;
}
return nRetCode;
}
}
'기본카테고리' 카테고리의 다른 글
[MFC]보색 구하는 방법 (0) | 2014.01.23 |
---|---|
[VC++]CListCtrl 을 읽기전용으로 설정하는 방법 (0) | 2013.10.01 |
[Linux] 프로그램 개발 방법 (0) | 2013.07.12 |
[Linux] Thread (0) | 2013.07.11 |
[VC++]Queue (0) | 2013.06.05 |