-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.c
67 lines (45 loc) · 1.55 KB
/
server.c
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
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int
main(void)
{
int sock0;
struct sockaddr_in addr;
struct sockaddr_in client;
socklen_t len;
int sock1, sock2;
/* ソケットの作成 */
sock0 = socket(AF_INET, SOCK_STREAM, 0);
/*** ソケットの設定 ***/
/* IPv4を利用することを指定 */
addr.sin_family = AF_INET;
/* ポート番号は11111 */
addr.sin_port = htons(11111);
/* 任意のインターフェースを指定 */
addr.sin_addr.s_addr = INADDR_ANY;
/* sockaddr_in構造体のサイズを設定(Linuxでは不要) */
// addr.sin_len = sizeof(addr);
/* ソケットをインターフェースとポートに関連付け */
bind(sock0, (struct sockaddr *)&addr, sizeof(addr));
/* TCPクライアントからの接続要求を持てる状態にする */
listen(sock0, 5);
/* TCPクライアントからの接続要求を受け付ける(1回目) */
len = sizeof(client);
sock1 = accept(sock0, (struct sockaddr *)&client, &len);
/* 6文字送信('H', 'E', 'L', 'L', 'O', '\0') */
write(sock1, "HELLO", 6);
/* TCPセッションの終了 */
close(sock1);
/* TCPクライアントからの接続要求を受け付ける(2回目) */
sock2 = accept(sock0, (struct sockaddr *)&client, &len);
/* 5文字送信 */
write(sock2, "HOGE", 5);
/* TCPセッション2の終了 */
close(sock2);
/* listenするsocketの終了 */
close(sock0);
return 0;
}