반응형
SMALL
위에 가면 더 좋은 강좌들이 많이 개설되어 있습니다. 개인적으로 사서 듣고있는데 도움이 많이 되는거 같아서 그 중 흥미로운 부분을 하나
발췌해서 소개해드리고자 합니다.
코드들이 전부 개인적인 소유를 갖고 있을 수 있어 업로드를 안하지만, 이 실습 코드 같은 경우에 Git에 연동하여 공유하는 실습까지 함께 진
행 했을 뿐만 아니라 '이런것도 배워보고 싶었는데....!'하시는 분들(저같은 경우도 포함) 에게 접근성을 높일 수 있을 거 같아 포스트합니다.
한번 가셔서 저는 '컴퓨터공학 올인원 패키지'를 수강하고 있는데 관심있다면 들어보시길 바랄게요
이것은 두개의 솔루션 폴더가 필요하고 각 소스 파일에 (서버와 클라이언트) main.cpp를 삽입해주세요.
Server 입니다.
#include<iostream>
#include<string>
#include<winSock2.h>
using namespace std;
void ShowErrorMessage(string message)
{
cout << "[ERROR CURRUPT]: " << message << '\n';
system("pause");
exit(1);
}
int main()
{
WSADATA wsaData;
SOCKET serverSocket, clientSocket;
SOCKADDR_IN serverAddress, clientAddress;
int serverPort = 9876;
char received[256];
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
ShowErrorMessage("WSAStartup()");
serverSocket = socket(PF_INET, SOCK_STREAM, 0);
if (serverSocket == INVALID_SOCKET)
ShowErrorMessage("socket()");
memset(&serverAddress, 0, sizeof(serverAddress));
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = htonl(INADDR_ANY);
serverAddress.sin_port = htons(serverPort);
if (bind(serverSocket, (SOCKADDR*)& serverAddress, sizeof(serverAddress)) == SOCKET_ERROR)
ShowErrorMessage("bind()");
cout << "[현재 상태] bind()\n";
if (listen(serverSocket, 5) == SOCKET_ERROR)
ShowErrorMessage("listen()");
cout << "[현재 상태] listen()\n";
int sizeClientAddress = sizeof(clientAddress);
clientSocket = accept(serverSocket, (SOCKADDR*)& clientAddress, &sizeClientAddress);
cout << "[현재 상태] accept()\n";
if (clientSocket == INVALID_SOCKET)
ShowErrorMessage("accept()");
while (1) {
int length = recv(clientSocket, received, sizeof(received), 0);
received[length] = NULL;
cout << "[클라이언트 메세지]: " << received << '\n';
cout << "[메세지 전송]:" << received << '\n';
if (strcmp(received, "[exit]") == 0) {
send(clientSocket, received, sizeof(received) - 1, 0);
cout << "[서버 종료]\n";
break;
}
send(clientSocket, received, sizeof(received) - 1, 0);
}
closesocket(clientSocket);
closesocket(serverSocket);
WSACleanup;
system("pause");
return 0;
}
Client 입니다
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <iostream>
#include <string>
#include <winsock2.h>
using namespace std;
void ShowErrorMessage(string message)
{
cout << "[오류 발생]:" << message << '\n';
system("pause");
exit(1);
}
int main()
{
WSADATA wsaData;
SOCKET clientSocket;
SOCKADDR_IN serverAddress;
int serverPort = 9876;
char received[256];
string sent;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
ShowErrorMessage("WSAStartup()");
clientSocket = socket(PF_INET, SOCK_STREAM, 0);
if (clientSocket == INVALID_SOCKET)
ShowErrorMessage("socket()");
memset(&serverAddress, 0, sizeof(serverAddress));
serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = inet_addr("127.0.0.1");
serverAddress.sin_port = htons(serverPort);
if (connect(clientSocket, (SOCKADDR*)& serverAddress, sizeof(serverAddress)) == SOCKET_ERROR)
ShowErrorMessage("connect()");
cout << "[현재 상태] connect()\n";
while (1) {
cout << "[메세지 전송]: ";
getline(cin, sent);
if (sent == "") continue;
send(clientSocket, sent.c_str(), sent.length(), 0);
int length = recv(clientSocket, received, sizeof(received), 0);
received[length] = '\0';
if (strcmp(received, "[exit]") == 0) {
cout << "[서버 종료]\n";
break;
}
cout << "[서버 메세지]: " << received << '\n';
}
closesocket(clientSocket);
WSACleanup();
system("pause");
return 0;
}
반응형
LIST
'코딩스터디' 카테고리의 다른 글
[C/C++자료구조] 연결리스트 (0) | 2019.08.30 |
---|---|
7466. 팩토리얼과 최대공약수 (0) | 2019.06.04 |
핵맨 게임 C++로 만들기 (0) | 2019.05.18 |
1231. [S/W 문제해결 기본] 9일차 - 중위순회 (0) | 2019.05.15 |
1226. [S/W 문제해결 기본] 7일차 - 미로1 (0) | 2019.05.13 |