前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go语言网络编程之tcp

go语言网络编程之tcp

作者头像
李海彬
发布2018-03-22 14:35:35
7180
发布2018-03-22 14:35:35
举报
文章被收录于专栏:Golang语言社区

go语言网络编程需要导入包 net如下

代码语言:javascript
复制
import (
    "fmt"
    "net"
)

重要函数

代码语言:javascript
复制
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

代码语言:javascript
复制
    i, j := 1, 1 
代码语言:javascript
复制
    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的使用,代码例子如下

file.Open("C:/test.txt")

defer file.Close()

作用:在函数退出时调用,这样就有效避免了C语言中的内存泄露问题.

下面大家可以看看超级简单的tcp服务器端的代码

package main import ( "net" "fmt" ) func main() {

代码语言:javascript
复制
代码语言:javascript
复制
        server, err := net.Listen("tcp", ":7777")
代码语言:javascript
复制
        if err == nil { //若果err为nil,则成功创建
代码语言:javascript
复制
            for {
代码语言:javascript
复制
                con, error_ := server.Accept()
代码语言:javascript
复制
                fmt.Println("有一个客户连接\n")
代码语言:javascript
复制
                if error_ == nil {
代码语言:javascript
复制
                    con.Write([]byte("hello world!"))
代码语言:javascript
复制
                }
代码语言:javascript
复制
            }
代码语言:javascript
复制
        } else {
代码语言:javascript
复制
            return
代码语言:javascript
复制
        }
代码语言:javascript
复制

}

下面则是客户端的代码

代码语言:javascript
复制
    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
        }
    }
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-08-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档