Hi community,
In my little example:
if server reads first, then writes;
client must writes first, then read;
then client must performs the operations in reverse order as server,
or both server and client will block.
In C++ boost.asio, the order of calls to async_read, async_write
does not matter in server and client.
Is there this kind of ` async ` read and write ability in golang packages?
Thanks
```
// server.go:
func main() {
logfile := "logfile.log"
logfd, err := log2.InitLog(logfile)
if err == nil {
defer logfd.Close()
}
if len(os.Args) != 2 {
log.Printf("Usage: ./server <port>")
os.Exit(-1)
}
port := os.Args[1]
ln, err := net.Listen("tcp", ":"+port)
if err != nil {
log.Println(err)
os.Exit(-1)
}
for {
conn, err := ln.Accept()
if err != nil {
log.Println(err)
os.Exit(-1)
}
go handleConnection(conn)
}
}
func handleConnection(conn net.Conn) {
defer conn.Close()
msgID := 0
buffer := make([]byte, 1024)
for {
n, err := conn.Read(buffer)
if err != nil {
log.Println(err, n)
break
}
fmt.Println(string(buffer))
msgID++
msg := fmt.Sprintf("msg from server with msgID: %d", msgID)
n, err = conn.Write([]byte(msg))
if err != nil {
log.Println(err, n)
break
}
}
}
// client.go:
func main() {
logfile := "logfile.log"
logfd, err := log2.InitLog(logfile)
if err == nil {
defer logfd.Close()
}
if len(os.Args) != 4 {
log.Printf("Usage: ./client <serverIP> <port> <tag>")
os.Exit(-1)
}
serverIP := os.Args[1]
port := os.Args[2]
tag := os.Args[3]
conn, err := net.Dial("tcp", serverIP+":"+port)
if err != nil {
log.Println(err)
os.Exit(-1)
}
handleConnection(conn, tag)
}
func handleConnection(conn net.Conn, tag string) {
defer conn.Close()
msgID := 0
buffer := make([]byte, 1024)
for {
msgID++
msg := fmt.Sprintf("msg from client: %s, msgID: %d", tag, msgID)
n, err := conn.Write([]byte(msg))
if err != nil {
log.Println(err, n)
break
}
n, err = conn.Read(buffer)
if err != nil {
log.Println(err, n)
break
}
fmt.Println(string(buffer))
}
}
```
--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to
golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/tencent_16864CF32F826D31908D052707F2E2621709%40qq.com.