go语言网络编程之tcp
go语言网络编程需要导入包 net如下
import (
"fmt"
"net"
)
重要函数
func Listen(net, laddr string) (Listener, error)
func Accept() (c Conn, err error)
func Read(b []byte) (n int, err error)
好,我们先写一个go服务器端。
编程之前,先来了解下go语法,熟悉的跳过此段。
go的变量声明比较怪,和c的声明“相反”
c语言的声明是这样的 int a;
go语言的声明是这样的 var a int; 如果无视var这个标志,你会就是“相反”。
而且你声明不使用会报错,在go中。
go语言的多变量赋值, i:=1 等价于刚才说明的 var i int = 1,下面的i,j赋值会自动匹配 i=1,j=1
i, j := 1, 1
i = i + j
恩,这个多变量赋值的这个东西,在函数返回值有多变量的用上。对,go语言函数可以返回多个值⊙﹏⊙
和lua语言相似。
go语言的函数实现如下所示,函数形参的声明不用带上var
func test(r
string
,
err
string
){
return r err
}
i,j:=test("1","2");
go语言的for和if
if和for 一样,可以在条件之前执行一个简单的语句,用分号相隔,由这个语句定义的变量的作用域仅在 if 范围之内。
如下所示
if y:=5;y==5 {//如果y=5则输出y
fmt.Println(y)
}
go语言defer的使用,代码例子如下
下面大家可以看看超级简单的tcp服务器端的代码
package main
import (
"net"
"fmt"
)
func main() {
server, err := net.Listen("tcp", ":7777")
if err == nil { //若果err为nil,则成功创建
for {
con, error_ := server.Accept()
fmt.Println("有一个客户连接\n")
if error_ == nil {
con.Write([]byte("hello world!"))
}
}
} else {
return
}
}
下面则是客户端的代码
conn, err := net.Dial("tcp", "127.0.0.1:7777")
if err == nil {
for {
buf := make([]byte, 1024)
if length, err := conn.Read(buf); err == nil {
if length > 0 {
buf[length] = 0
fmt.Printf("%s", string(buf[0:length]))
}
}
}
} else {
return
}
整合在一起就是以下代码
if os.Args[1] == "server" {
server, err := net.Listen("tcp", ":7777")
if err == nil { //若果err为nil,则成功创建
for {
con, error_ := server.Accept()
fmt.Println("有一个客户连接\n")
if error_ == nil {
con.Write([]byte("hello world!"))
}
}
} else {
return
}
} else {
conn, err := net.Dial("tcp", "127.0.0.1:7777")
if err == nil {
for {
buf := make([]byte, 1024)
if length, err := conn.Read(buf); err == nil {
if length > 0 {
buf[length] = 0
fmt.Printf("%s", string(buf[0:length]))
}
}
}
} else {
return
}
}
有疑问加站长微信联系(非本文作者)