-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.go
74 lines (61 loc) · 1.64 KB
/
server.go
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
package main
import (
"fmt"
"bufio"
"net"
"os"
"net/http"
"net/http/httputil"
)
func main() {
fmt.Println("===サーバー起動中===")
// localhost8080番ポートで待ち受け
listener, err := net.Listen("tcp", "localhost:8080")
// 待ち受け終了の遅延実行
defer listener.Close()
// 待ち受け失敗したらエラー吐く
if err != nil {
fmt.Println("エラー: ", err)
return
}
fmt.Println("===サーバー起動済===")
// コネクション確立
conn, err := listener.Accept()
// 確立終了の遅延実行
defer conn.Close()
// 確立失敗したらエラー吐く
if err != nil {
fmt.Println("エラー: ", err)
return
}
fmt.Printf("===クライアント接続済: %s===\n", conn.RemoteAddr())
// クライアントからのリクエスト受け取り
// buf := make([]byte, 4096)
request, err := http.ReadRequest(bufio.NewReader(conn))
if err != nil {
panic(err)
}
dump, err := httputil.DumpRequest(request, true)
if err != nil {
panic(err)
}
fmt.Println(string(dump))
// クライアントからのリクエストをファイルに出力
f, err := os.Create("./go_server_recv.txt")
count, err := f.Write(dump)
// バイト数確認
fmt.Printf("write %d bytes\n", count)
// レスポンスをファイルから取得
response, err := os.ReadFile("./server_send.txt")
// 取得失敗したらエラー吐く
if err != nil {
fmt.Println("エラー: ", err)
}
// レスポンスをクライアントに送る
_, err = conn.Write(response)
// 送るのに失敗したらエラー吐く
if err != nil {
fmt.Println("エラー: ", err)
}
fmt.Println("===サーバー終了中===")
}