Golang Socket 프로그래밍 인스턴스
package main
import (
"net"
"fmt"
"strings"
)
func handle(conn net.Conn) {
defer conn.Close()
buf := make([]byte, 2048)
for {
n, err := conn.Read(buf)
if err != nil {
fmt.Println("read err = ", err)
return
}
content := strings.TrimSpace(string(buf[:n]))
fmt.Println("receive =", content)
if content == "exit" {
return
}
conn.Write([]byte(strings.ToUpper(content)))
}
}
func main() {
ss, err := net.Listen("tcp", "127.0.0.1:8000")
if err != nil {
fmt.Println("listen err = ", err)
return
}
fmt.Println("listening at 127.0.0.1:8000")
for {
conn, err := ss.Accept()
if err != nil {
fmt.Println("connect err = ", err)
return
}
go handle(conn)
}
}
클라이언트 프로그램:
package main
import (
"net"
"fmt"
"os"
)
func ScanLine() string {
var c byte
var err error
var b []byte
for ; err == nil; {
_, err = fmt.Scanf("%c", &c)
if c != '
' {
b = append(b, c)
} else {
break;
}
}
return string(b)
}
func main() {
conn, err := net.Dial("tcp", "127.0.0.1:8000")
if err != nil {
fmt.Println("connect err = ", err)
return
}
go func(conn net.Conn) {
buf := make([]byte, 2048)
for {
n, err := conn.Read(buf)
if err != nil {
fmt.Println("read err = ", err)
return
}
fmt.Println(string(buf[:n]))
}
}(conn)
for {
input := ScanLine()
conn.Write([]byte(input))
if input == "exit" {
os.Exit(0)
}
}
}
참고 사항:
1.키보드에서 한 줄을 입력하려면 특별한 처리가 필요하다. 그렇지 않으면 한 줄의 입력 데이터가 몇 단락으로 나누어 발송되는 상황이 발생할 수 있다
2.클라이언트는 서버에서 받은 데이터를 새 프로토콜로 처리하고 키보드 입력을 메인 프로토콜로 처리해야 합니다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Golang 구현 대기열 및 스택대기열: 스택: github 주소:https://github.com/golibec/Lstruct.git 후속적으로 각종 데이터 구조와 주류 알고리즘을 지속적으로 보완할 것이다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.