赞
踩
Server端:利用net包创建服务器,go实现多线程监听,可同时处理多个client的连接
package main
import (
"log"
"net"
"os"
)
func recvMessage(client net.Conn) error {
var message []byte
message = make([]byte, 1024)
var out string
for {
len, _ := client.Read(message)
if len > 0 {
out = string(message)
log.Println(out)
for i :=0; i < len; i++ {
message[i] = 0
}
}
}
return nil
}
func main() {
server, err := net.Listen("tcp", "localhost:8500")
if err != nil {
log.Fatal("start server failed!\n")
os.Exit(1)
}
defer server.Close()
log.Println("server is running...")
for {
client, err := server.Accept()
if err != nil {
log.Fatal("Accept error\n")
continue
}
log.Println("the client is connectted...")
go recvMessage(client)
}
}
----------------
Client:连接服务器,发送消息
package main
import(
"log"
"net"
"fmt"
"time"
"bufio"
"os"
)
func main() {
BEG: client, err := net.Dial("tcp", "localhost:8500")
if err != nil {
log.Println("create client error...")
time.Sleep(2*time.Second)
goto BEG
}
client.Write([]byte("this is huangq test"))
fmt.Println("Please input message to send to server(End with nil)!!!")
var mm []byte
mm = make([]byte, 1024)
G1: Scan(&mm)
client.Write(mm)
length := len(mm)
if length != 0 {
for length > 0 {
length--
mm[length] = 0
}
goto G1
}
defer client.Close()
}
//输入的字符串中可包含空格
func Scan(s *[]byte) {
reader := bufio.NewReader(os.Stdin)
data, _, _ := reader.ReadLine()
*s = data
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。