分享
  1. 首页
  2. 文章

go语言网络编程之tcp

bojie5744 · · 13401 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

go语言网络编程之tcp

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

import(
"fmt"
"net"
)

重要函数

funcListen(net,laddrstring)(Listener,error)
func Accept()(cConn,errerror)
func Read(b[]byte)(nint,errerror)

好,我们先写一个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的使用,代码例子如下

file.Open("C:/test.txt")
defer file.Close()
作用:在函数退出时调用,这样就有效避免了C语言中的内存泄露问题.


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

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

server,err:=net.Listen("tcp",":7777")
iferr==nil{//若果err为nil,则成功创建
for{
con,error_:=server.Accept()
fmt.Println("有一个客户连接\n")
iferror_==nil{
con.Write([]byte("helloworld!"))
}
}
}else{
return
}
}

下面则是客户端的代码

conn,err:=net.Dial("tcp","127.0.0.1:7777")
iferr==nil{
for{
buf:=make([]byte,1024)
iflength,err:=conn.Read(buf);err==nil{
iflength>0{
buf[length]=0
fmt.Printf("%s",string(buf[0:length]))
}
}
}
}else{
return
}

整合在一起就是以下代码

ifos.Args[1]=="server"{
server,err:=net.Listen("tcp",":7777")
iferr==nil{//若果err为nil,则成功创建
for{
con,error_:=server.Accept()
fmt.Println("有一个客户连接\n")
iferror_==nil{
con.Write([]byte("helloworld!"))
}
}
}else{
return
}
}else{
conn,err:=net.Dial("tcp","127.0.0.1:7777")
iferr==nil{
for{
buf:=make([]byte,1024)
iflength,err:=conn.Read(buf);err==nil{
iflength>0{
buf[length]=0
fmt.Printf("%s",string(buf[0:length]))
}
}
}
}else{
return
}
}
















有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:bojie5744

查看原文:go语言网络编程之tcp

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
13401 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏