이번 글에서는 TCP서버를 열고 거기에 접속하는 사용자에게 "Hello TCP"라는 문자열을 return 해준 후에 connection을 닫는 간단한 프로그램을 만들어보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
package main
import (
"io"
"log"
"net"
)
func main() {
li, err := net.Listen("tcp", "127.0.0.1:8080")
if err != nil {
log.Panic(err)
}
defer li.Close()
for {
conn, err := li.Accept()
if err != nil {
log.Println(err)
}
io.WriteString(conn, "Hello TCP\n")
conn.Close()
}
}
|
cs |
net.Listen 함수를 통해 tcp서버를 localhost(=127.0.0.1)에 포트번호 8080번을 Listen하게 합니다.
이러면 함수 인자로 넣은 IP주소와 port number에 바인딩 하게 되는데 li.Addr()을 출력해보시면 127.0.0.1:8080이 나오는걸 확인할 수 있습니다.
li.Accept() 구문은 누군가 접속하기전까지 코드가 더 넘어가지 않습니다. 즉, 누군가가 접속하기전까지는 16번째 줄에서 계속 대기하게 됩니다. 그리고 누군가 접속하면 "Hello TCP"를 접속한 사람에게 출력해주고 connection은 종료가 됩니다.
그러나 위 코드에서는 무한 반복문으로 구성되어 있으므로 접속한 사람에게 "Hello TCP"를 반환해준 후에 서버는 꺼지지 않고 계속 다른 누군가를 기다립니다. 다른 누군가도 접속하면 "Hello TCP"를 받고 connection은 바로 끊기고 이게 무한 반복되는 코드입니다.
위 코드를 실행 시킨 후에 telnet으로 "telnet localhost 8080" 명령어로 접속해보면 제대로 작동하는걸 확인할 수 있습니다.
결과는 아래와 같습니다.
이상 간단한 TCP 프로그램 예제였습니다. 다음 글에서는 조금 더 복잡한 네트워크 프로그래밍을 다루도록 하겠습니다.
'golang' 카테고리의 다른 글
golang cancel과 waitGroup 기초 (0) | 2021.04.11 |
---|---|
golang signal과 context 기초 (0) | 2021.04.06 |
golang에서 heap 사용하기 (0) | 2021.04.03 |
golang 인터페이스 활용 (0) | 2021.03.25 |
golang의 is a 관계 (0) | 2021.03.25 |