#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
|
#include <WinSock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define bufsize 1024
int main(){
WSADATA wsa;
char buf[bufsize];
if(WSAStartup(MAKEWORD(2,2), &wsa) != 0) {
printf("not equal version\n");
return 0;
}
int server_socket, client_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;
}
while(1){
recv(client_socket, buf, sizeof(buf), 0);
printf("[client] : %s\n", buf);
char send_buf[bufsize];
memset(send_buf, 0, bufsize);
printf("input data : ");
scanf("%s", send_buf);
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
|
#include <WinSock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
#define bufsize 1024
int main(){
WSADATA wsa;
char buf[bufsize];
if(WSAStartup(MAKEWORD(2,2), &wsa)) {
printf("Not Equal Version\n");
return 0;
}
int server_socket;
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;
}
while(1) {
printf("input data : ");
scanf("%s", buf);
send(server_socket, buf, sizeof(buf), 0);
memset(buf, 0, bufsize);
recv(server_socket, buf, bufsize, 0);
printf("[Server] : %s\n", buf);
memset(buf, 0, bufsize);
}
return 0;
}
|
cs |
Reference
#1. 소켓 프로그래밍 기초 in C
http://forum.falinux.com/zbxe/index.php?document_srl=438301&mid=C_LIB
블로그의 정보
Data+
Qerogram