【go】go语言socket通信样例

摘要:
=nil{panic}deferconn.Close()buf:=makefori:=0;i˂5;i++{//准备要发送的字符串msg:=fmt.Sprintfn,err:=conn.Writeiferr!=nil{printlnbreak}fmt.Println//从服务器端收字符串n,err=conn.Readiferr!=nil{printlnbreak}fmt.Println//等一秒钟time.Sleep}}先执行server:gorunserver.go在执行client:gorunclient.go回过来看server端:当client信息发送结束后,会在server段显示EOF结束的字符。另外,执行gobuildxxx.go在当前目录下会产生一个unit可执行文件,执行./xxx即可执行文件。

server.go

package main
import (
    "net"
    "fmt"
    "io"
)
const RECV_BUF_LEN = 1024
func main() {
    listener, err := net.Listen("tcp", "0.0.0.0:6666")//侦听在6666端口
    if err !=nil {
        panic("error listening:"+err.Error())
    }
    fmt.Println("Starting the server")
    for{
        conn, err := listener.Accept() //接受连接
        if err !=nil {
            panic("Error accept:"+err.Error())
        }
        fmt.Println("Accepted the Connection :", conn.RemoteAddr())
        go EchoServer(conn)
    }
}
func EchoServer(conn net.Conn) {
    buf := make([]byte, RECV_BUF_LEN)
    defer conn.Close()
    for{
        n, err :=conn.Read(buf);
        switcherr {
            casenil:
                conn.Write( buf[0:n] )
            caseio.EOF:
                fmt.Printf("Warning: End of data: %s 
", err);
                return
            default:
                fmt.Printf("Error: Reading data : %s 
", err);
                return
        }
     }
}

client.go

package main
import (
    "fmt"
    "time"
    "net"
)
const RECV_BUF_LEN = 1024
func main() {
    conn,err := net.Dial("tcp", "127.0.0.1:6666")
    if err !=nil {
        panic(err.Error())
    }
    defer conn.Close()
    buf := make([]byte, RECV_BUF_LEN)
    for i := 0; i < 5; i++{
        //准备要发送的字符串
        msg := fmt.Sprintf("Hello World, %03d", i)
        n, err := conn.Write([]byte(msg))
        if err !=nil {
            println("Write Buffer Error:", err.Error())
            break
        }
        fmt.Println(msg)
        //从服务器端收字符串
        n, err =conn.Read(buf)
        if err !=nil {
            println("Read Buffer Error:", err.Error())
            break
        }
        fmt.Println(string(buf[0:n]))
        //等一秒钟
time.Sleep(time.Second)
    }
}

先执行server:

go run server.go

【go】go语言socket通信样例第1张

在执行client:

go run client.go

【go】go语言socket通信样例第2张

回过来看server端:

【go】go语言socket通信样例第3张

当client信息发送结束后,会在server段显示 EOF结束的字符。

另外,执行go build xxx.go在当前目录下会产生一个unit可执行文件,执行./xxx 即可执行文件。

ps: 此样例摘抄自他人,仅供go语言学习!

免责声明:文章转载自《【go】go语言socket通信样例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用fastDFS上传和下载图片文件C#——安装包制作 [桌面快捷图标 右键属性 打开文件位置,更改图标]问题解决下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

无线射频技术基础(2017.7.14更新)

 RF (Radio Freqency) 射频,无线电频率 1.把概念搞清楚~大家认真读几遍,至少扫扫盲~ Ref:射频  射频(RF)是Radio Frequency的缩写,表示可以辐射到空间的电磁频率,频率范围从300KHz~300GHz之间。 射频简称RF,射频就是射频电流,它是一种高频交流变化电磁波的简称。 每秒变化小于1000次的交流电称为...

iOS开发之socket简介

1,socket是什么? 2,socket的作用 3,socket怎么用 4,socket的扩展 —————————————————————— socket是什么?          Socket这个名词现在有很多不同的意思,这里主要讲到其中2个含义。一是,套接字socket=(IP地址:端口号),是端的概念。二是,socket在应用层和传输层之间,是层的...

利用MATLAB仿真节点个数和节点通信半径与网络连通率的关系

一、目的        ①在不同节点个数的情况下,用Matlab拟合出连通率与通信半径的关系曲线。        ②在不同节点通信半径的情况下,用Matlab拟合出连通率与节点个数的关系曲线。 二、方法描述        在1x1的单位矩形中随机部署传感器节点,而且假设每个节点的通信半径一样。在每一组节点个数和节点通信半径下进行1000次试验,进而分别模拟...

Docker Swarm 创建overlay网络

Docker Swarm 创建overlay网络 环境: 系统:Centos 7.4 x64 应用版本:Docker 18.09.0 管理节点:192.168.1.79 工作节点:192.168.1.78 工作节点:192.168.1.77 一、创建网络与服务 1、管理节点:创建overlay网络名字为my-network docker networ...

[爬虫]采用Go语言爬取天猫商品页面

最近工作中有一个需求,需要爬取天猫商品的信息,整个需求的过程如下: 修改后端广告交易平台的代码,从阿里上传的素材中解析url,该url格式如下: https://handycam.alicdn.com/slideshow/26/7ef5aed1e3c39843e8feac816a436ecf.mp4?content=%7B%22items%22%3A%5B...

JS-OC通信之Cordova简介

Cordova 是一个可以让 JS 与原生代码(包括 Android 的 java,iOS 的 Objective-C 等)互相通信的一个库,并且提供了一系列的插件类,比如 JS 直接操作本地数据库的插件类。 这些插件类都是基于 JS 与 Objective-C 可以互相通信的基础的,这篇文章说说 Cordova 是如何做到 JS 与 Objective-...