#3. 소켓 프로그래밍으로 간단한 채팅프로그램 만들기2 in C
by Qerogram서론
양방향으로 통신하는 것도 쓰레드를 이용하면 쉽게 가능하므로, 간단하게 구현했다.
아마 정말 더이상 업로드는 없을 것 같은데, 만약 한다면 멀티로 개량하지 않을까 싶다.
진행과정
1. 서버 측 코드
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
|
#include <WinSock2.h>
#include <stdio.h>
#include <process.h>
#include <conio.h>
#pragma comment(lib, "ws2_32.lib")
#define bufsize 1024
char buf[bufsize];
int client_socket;
void read(void*) {
while(1) {
recv(client_socket, buf, sizeof(buf), 0);
printf("[client] : %s\n", buf);
memset(buf, 0, bufsize);
}
}
int main(){
WSADATA wsa;
if(WSAStartup(MAKEWORD(2,2), &wsa) != 0) {
printf("not equal version\n");
return 0;
}
int server_socket, client_addr_size;
server_socket = socket(PF_INET, SOCK_STREAM, 0);
if(SOCKET_ERROR == server_socket){
printf("Create Socket Fail\n");
return 0;
}
SOCKADDR_IN server_addr, client_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(4777);
server_addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
if(SOCKET_ERROR == bind(server_socket , (const sockaddr*)&server_addr, sizeof(server_addr))) {
printf("Fail binding\n");
return 0;
}
if(SOCKET_ERROR == listen(server_socket, 5)) {
printf("대기상태 설정 실패\n");
return 0;
}
client_addr_size = sizeof(client_addr);
client_socket = accept(server_socket, (struct sockaddr*)&client_addr, &client_addr_size);
if(SOCKET_ERROR == client_socket) {
printf("Client Connect Fail\n");
return 0;
}
_beginthread(read, 0, (void*)1);
while(1){
char send_buf[bufsize];
memset(send_buf, 0, bufsize);
printf("input data : ");
gets(send_buf);
fflush(stdin);
send(client_socket, send_buf, sizeof(send_buf), 0);
}
closesocket(client_socket);
closesocket(server_socket);
WSACleanup();
return 0;
}
|
cs |
2. 클라이언트 측 코드
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
|
#include <WinSock2.h>
#include <stdio.h>
#include <process.h>
#pragma comment(lib, "ws2_32.lib")
#define bufsize 1024
int server_socket;
char read_buf[bufsize];
void read(void*) {
while(1) {
memset(read_buf, 0, bufsize);
recv(server_socket, read_buf, bufsize, 0);
printf("[Server] : %s\n", read_buf);
}
}
int main(){
WSADATA wsa;
char buf[bufsize];
if(WSAStartup(MAKEWORD(2,2), &wsa)) {
printf("Not Equal Version\n");
return 0;
}
server_socket = socket(PF_INET, SOCK_STREAM, 0);
if(SOCKET_ERROR == server_socket) {
printf("Socket Create Error\n");
return 0;
}
SOCKADDR_IN server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(4777);
server_addr.sin_addr.S_un.S_addr = htonl(0x7F000001);
if(SOCKET_ERROR == connect(server_socket, (const sockaddr*)&server_addr, sizeof(server_addr))){
printf("not connect\n");
return 0;
}
_beginthread(read, 0, (void*)1);
while(1) {
printf("input data : ");
gets(buf);
fflush(stdin);
send(server_socket, buf, sizeof(buf), 0);
memset(buf, 0, bufsize);
}
return 0;
}
|
cs |
'코딩 > C&C++' 카테고리의 다른 글
#2. 소켓 프로그래밍으로 간단한 채팅프로그램 만들기 in C (0) | 2018.01.08 |
---|---|
#1. 소켓 프로그래밍 기초 in C (0) | 2018.01.08 |
27. STL 범용 수치 알고리즘 (0) | 2017.04.22 |
26. STL 정렬 관련 알고리즘 (0) | 2017.04.22 |
25. STL 변경 가능 시퀀스 알고리즘 (0) | 2017.04.21 |
블로그의 정보
Data+
Qerogram