这里给出一个服务端和客户端,服务端可以接受多个连接,并且利用Go的杀手特性go和channel来替代select进行数据的接收。
服务端:
package main
import (
"fmt"
. "syscall"
)
func RecvRoutine(sockfd int, session chan string) {
var buffer []byte = make([]byte, 3000)
for {
if length, err := Read(sockfd, buffer); err == nil {
session <- string(buffer[:length])
}
}
}
func main() {
var (
serversock int
serveraddr SockaddrInet4
session chan string = make(chan string, 1000)
err error
)
if serversock, err = Socket(AF_INET, SOCK_STREAM, IPPROTO_IP); err != nil {
fmt.Println("Server Socket() called error:", err.Error())
return
}
defer Shutdown(serversock, SHUT_RDWR)
serveraddr.Addr = [4]byte{127, 0, 0, 1}
serveraddr.Port = 3000
if err = Bind(ser