最近利用空余时间学了一会Go语言,写了个简单的socket案例,不多说,直接上代码
Server 端代码:
package main
import (
"fmt"
"net"
)
// 服务器地址:端口
var serverAddress = "localhost:1234"
func start() {
acceptor,err := net.Listen("tcp", serverAddress)
if err!=nil {
fmt.Println("start server meet an error")
return
}
// 延迟关闭资源,避免内存泄漏
defer acceptor.Close()
// 死循环监听处理
for{
conn,er := acceptor.Accept()
if er!=nil {
continue
}
go handler(conn)
}
}
func handler(conn net.Conn) {
fmt.Println("receive conn "+ conn.RemoteAddr().String())
// 缓冲区
buffer:=make([]byte, 1024)
// 死循环读写数据
for{
n,err:=conn.Read(buffer)
if err!=nil {
fmt.Println("server read data meet an error")
return
}
fmt.Println("receive client send "+ string(buffer[:n]))
// 回复
words:="hello,I'm server"
conn.Write([]byte(words))
}
}
func main() {
start()
}
Client 端代码:
package main
import (
"fmt"
"net"
)
var serverAddress = "localhost:1234"
func connect() {
conn,err:=net.Dial("tcp", serverAddress)
if err!=nil{
fmt.Println("client connect meet an error")
return
}
fmt.Println(conn.RemoteAddr())
handleIO(conn)
}
func handleIO(conn net.Conn) {
conn.Write([]byte("Hi!"))
buffer:=make([]byte, 1024)
for{
n,err:=conn.Read(buffer)
if err!=nil {
fmt.Println("client read data meet an error")
return
}
content:=string(buffer[:n])
fmt.Println("client received message "+content)
// 回复
conn.Write([]byte("Hi!"))
}
}
func main() {
connect()
}