-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSocket_MainCom.cpp
More file actions
76 lines (60 loc) · 2.49 KB
/
Socket_MainCom.cpp
File metadata and controls
76 lines (60 loc) · 2.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <stdio.h>
#include <Winsock2.h>
#include <conio.h>
#include <string.h>
#include <stdbool.h>
#pragma comment(lib, "ws2_32")
#define PORT 4578
#define PACKET_SIZE 1024
int message(SOCKET hClient);
int main() {
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
SOCKET hListen;
hListen = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); //IPV4타입, 연결지향형 소켓, TCP 사용
SOCKADDR_IN tListenAddr; //소켓 구성요소 담을 구조체 생성
memset(&tListenAddr, 0, sizeof(SOCKADDR_IN)); //구조체 0으로 초기화
tListenAddr.sin_family = AF_INET; //주소 정보
tListenAddr.sin_port = htons(PORT); //포트 번호
tListenAddr.sin_addr.s_addr = htonl(INADDR_ANY); //ip주소 설정 - 현재 동작되는 컴퓨터의 ip 주소
bind(hListen, (SOCKADDR*)& tListenAddr, sizeof(tListenAddr)); //소캣의 주소정보 전달
listen(hListen, SOMAXCONN); //접속 승인
SOCKADDR_IN tClntAddr; //소켓 정보 담을 구조체 생성
memset(&tClntAddr, 0, sizeof(SOCKADDR_IN)); //구조체 0으로 초기화
int iClntSize = sizeof(tClntAddr);
SOCKET hClient = accept(hListen, (SOCKADDR*)& tClntAddr, &iClntSize); //접속 요청 수락
chatting(hClient); //채팅 시작
closesocket(hClient);
closesocket(hListen);
WSACleanup();
return 0;
}
int chatting(SOCKET hClient) {
int nRcv, strLen;
char message[PACKET_SIZE];
char indi[2] = { 'q' };
bool a;
while (1)
{
printf("Message Recives .. \n");
nRcv = recv(hClient, message, sizeof(message) - 1, 0); //message 받음
message[nRcv] = '\0';
a = (message[0] == indi[0]) ? FALSE : TRUE; //message가 q인지 판단하기 위함
if (a == FALSE)
{
printf("Close\n");
break;
}
printf("Receive Message : %s", message);
printf("\nSend Message : ");
fgets(message, 30, stdin); //message 입력받음
a = (message[0] == indi[0]) ? FALSE : TRUE; //q인지 판단
if (a == FALSE)
{
printf("Close...\n");
break;
}
strLen = strlen(message);
send(hClient, message, strLen, 0); //message 보냄
}
}