golangのネットワークプログラミングtcp
// code_050_socket_knowledge project main.go
package main
import (
"fmt"
)
//TCP C/S
//TCP :net.Dial() Write() Read() Close()
//TCP :net.Listen() Accept() Read() Write() Close()
/*
Unix “ ”,
“ open –> write/read –> close” 。
Socket , Socket I/O,Socket 。
Socket :Socket(), Socket ,
、 Socket
*/
// Socket : Socket(SOCK_STREAM) Socket(SOCK_DGRAM)。
func main() {
fmt.Println("Hello World!")
}
サーバ
// code_051_tcp_service project main.go
package main
import (
"fmt"
"log"
"net"
"strings"
)
func dealConn(conn net.Conn) {
defer conn.Close()
ipAddr := conn.RemoteAddr().String()
fmt.Println(ipAddr, " ")
buf := make([]byte, 1024)
for {
//
n, err := conn.Read(buf)
if err != nil {
fmt.Println(err)
return
}
// ,
result := buf[:n]
fmt.Printf(" [%s]==>[%d]:%s
", ipAddr, n, string(result))
if "exit" == string(result) {
fmt.Println(ipAddr, " ")
return
}
conn.Write([]byte(strings.ToUpper(string(result))))
}
}
func main() {
listenner, err := net.Listen("tcp", "127.0.0.1:8001")
//go :An attempt was made to access a socket in a way forbidden by its access permissions.
if err != nil {
log.Fatal(err) //log.Fatal() panic
}
for {
conn, err := listenner.Accept()
if err != nil {
log.Println(err)
continue
}
go dealConn(conn)
}
}
クライアント:
// code_052_tcp_client project main.go
package main
import (
"fmt"
"log"
"net"
)
func main() {
//
conn, err := net.Dial("tcp", "127.0.0.1:8001")
if err != nil {
log.Fatal(err) //log.Fatal() panic
return
}
defer conn.Close() //
buf := make([]byte, 1024) //
for {
fmt.Printf(" :")
fmt.Scan(&buf) // Python input-->>buf = input(" ")
fmt.Printf(" :%s
", string(buf))
conn.Write(buf)
n, err := conn.Read(buf)
if err != nil {
fmt.Println(err)
return
}
result := buf[:n]
fmt.Printf(" [%d]:%s
", n, string(result))
}
}