일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Close
- mutex
- c++
- Sync
- FOR
- range
- http
- install
- json
- package
- C
- API
- 책
- go언어
- 리뷰
- Linux
- Python
- tcp
- Callback
- 영화
- go
- bitcoin
- Golang
- JavaScript
- write
- windows
- File
- channel
- GO 언어
- window
- Today
- Total
목록Dial (3)
Code Habit
앞에서 go를 이용한 TCP ehco 서버/클라이언트를 만들어 보았는데, 구현에 문제점이 있다고 지적하였었다. TCP 통신은 원래 데이터간의 경계가 존재 하지 않는다. 즉 네트워크나 PC 상황에 따라 데이터 전송이 밀려 자칫 데이터 전송이 의도치 않게 될수 있다는 것이다. 그래서 이를 보완하기 위해 본 데이터를 전송하기 전에 미리 전송되는 데이터의 size를 알려줘 데이터 전송에 오차가 없도록 할 수 있다. 참 다행히도 TCP 통신은 데이터의 무결성을 보장하기 때문에 전송하는 데이터가 중간에 유실될 염려는 하지 않아도 된다. 다음은 예제 코드이다. 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 func Co..
go를 이용하여 간단한 tcp echo 서버/클라이언트를 만들어 보겠다. server 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 // main.go package main import ( "io" "log" "net" ) func main() { l, err := net.Listen("tcp", ":8000") if nil != err { log.Println(err) } defer l.Close() for { conn, err := l.Accept() if nil != err { ..
golang에서 "net" 패키지에서 TCP 프로토콜을 제공한다. 간단히 TCP 프로토콜 에코서버와 클라이언트를 만들어 보겠다. 서버 예제 // main.go package main import ( "fmt" "io" "net" ) func handler(conn net.Conn) { recv := make([]byte, 4096) for { n, err := conn.Read(recv) if err != nil { if err == io.EOF { fmt.Println("connection is closed from client : ", conn.RemoteAddr().String()) } fmt.Println("Failed to receive data : ", err) break } if n > 0 ..