//服务端代码
package main
import (
"fmt"
"net"
"log"
"os"
"encoding/binary"
) func main() { //建立socket,监听端口
netListen, err := net.Listen("tcp", "localhost:8090")
CheckError(err)
defer netListen.Close() Log("Waiting for clients")
for {
conn, err := netListen.Accept()
if err != nil {
continue
} Log(conn.RemoteAddr().String(), " tcp connect success")
handleConnection(conn)
}
}
//处理连接
func handleConnection(conn net.Conn) { //buffer := make([]byte, 2048) for {
var pi float64
var a uint16 err := binary.Read(conn, binary.LittleEndian, &pi)//读取浮点数
err = binary.Read(conn, binary.LittleEndian, &a)//读取整数
CheckError(err) if err != nil {
Log(conn.RemoteAddr().String(), " connection error: ", err)
return
} Log(conn.RemoteAddr().String(), "receive data string:\n", (pi), ", uint16 a= " , a) }
}
func Log(v ...interface{}) {
log.Println(v...)
} func CheckError(err error) {
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
os.Exit(1)
}
}

客户端:


package main

import (
"fmt"
"net"
"os"
"bytes"
"encoding/binary"
) var x float32 = 1.2 //1.2 func init() { //1.3 fmt.Printf("p1 package, x:%f\n", x) //1.4
} func Donothing() { fmt.Println("do nothing.\n")
} func sender(conn net.Conn) { var pi float64 = 3.141592653589793
buf := new(bytes.Buffer)
err := binary.Write(buf, binary.LittleEndian, pi)//向buf中写入浮点数
if err != nil {
fmt.Println("binary.Write failed:", err)
}
// 这里可以继续往buf里写, 都存在buf里
err = binary.Write(buf, binary.LittleEndian, uint16(12345))//向buf中写入整数
if err != nil {
fmt.Println("binary.Write failed:", err)
}
fmt.Print(buf.Bytes())
// [24 45 68 84 251 33 9 64]
fmt.Println("send over") conn.Write(buf.Bytes())//向socket中写入buf
//words := "hello world!"
//conn.Write([]byte(words)) } func main() {
server := "127.0.0.1:8090"
tcpAddr, err := net.ResolveTCPAddr("tcp4", server)//转换成TCP地址
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
os.Exit(1)
} conn, err := net.DialTCP("tcp", nil, tcpAddr)//进行TCP连接
if err != nil {
fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error())
os.Exit(1)
} fmt.Println("connect success")
sender(conn)//发送请求 }

  

golang入门案例之SOCKET的更多相关文章

  1. golang入门案例之http client请求

    发请求,接收接送,并解析 package main import ( "fmt" "net/http" "io/ioutil" " ...

  2. Java程序员的Golang入门指南(下)

    Java程序员的Golang入门指南(下) 4.高级特性 上面介绍的只是Golang的基本语法和特性,尽管像控制语句的条件不用圆括号.函数多返回值.switch-case默认break.函数闭包.集合 ...

  3. _00017 Kafka的体系结构介绍以及Kafka入门案例(0基础案例+Java API的使用)

    博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...

  4. Golang 入门 : channel(通道)

    笔者在<Golang 入门 : 竞争条件>一文中介绍了 Golang 并发编程中需要面对的竞争条件.本文我们就介绍如何使用 Golang 提供的 channel(通道) 消除竞争条件. C ...

  5. Golang入门学习(三):函数

    文章目录 2.3 函数 2.3.1 基本语法 2.3.2 入门demo: 2.3.3 函数递归: 2.3.4 函数注意事项 2.3.5 init函数 2.3.6 匿名函数 2.3.7 闭包 2.3.8 ...

  6. SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)

    SpringMVC简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 Spring结构图 Spr ...

  7. SpringMvc核心流程以及入门案例的搭建

    1.什么是SpringMvc Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 M ...

  8. Struts2第一个入门案例

      一.如何获取Struts2,以及Struts2资源包的目录结构的了解    Struts的官方地址为http://struts.apache.org 在他的主页当中,我们可以通过左侧的Apache ...

  9. MyBatis入门案例、增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

随机推荐

  1. maven 学习之路一

    一.mave介绍: maven :我的理解就是一个代码构建管理的一个工具.类似的工具有gradle,ant等. 官方理解:Apache Maven is a software project mana ...

  2. office visio

    画 流程图软件 UML 是否要用做类图.时序图?????

  3. 欧拉函数 || [SDOI2008]仪仗队 || BZOJ 2190 || Luogu P2158

    题面:P2158 [SDOI2008]仪仗队 题解: 显然除了(1,1),(0,1),(1,0)三个点外,对于其他点(x,y)只要满足gcd(x,y)==1就可以被看到 然后这些点是关于y=x对称的, ...

  4. --set-upstream新版本不在支持

    --set-upstream最新版本貌似不在支持,使用--track和--set-uptream-to来替代 --set-upstream: git branch --set-upstream [本地 ...

  5. 如何在python中使用chromedriver

    下载对应版本的chromedriver,不知道版本的请参考:https://stackoverflow.com/a/55266105/11128312 接下来将下载的chromedriver.exe放 ...

  6. cookie的使用以及cookie的跨域名获取

    cookie存放容量4k左右,可设置过期时间. 1.cookie的封装使用 //设置cookies function setCookie(name, value) { var Days = 30; v ...

  7. 【leetcode】960. Delete Columns to Make Sorted III

    题目如下: We are given an array A of N lowercase letter strings, all of the same length. Now, we may cho ...

  8. Eclipse 开发环境修改及MAVEN配置

    Eclipse集成Maven配置 默认为 修改为所用版本 选择maven软件所在目录 勾选 默认连接仓库为 修改为

  9. poj 2559 Largest Rectangle(单调栈)

    Largest Rectangle in a Histogram Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26549 ...

  10. 【CF963C】Cutting Rectangle(数论,构造,map)

    题意: 思路:考虑构造最小的单位矩形然后平铺 单位矩形中每种矩形的数量可以根据比例算出来,为c[i]/d,其中d是所有c[i]的gcd,如果能构造成功答案即为d的因子个数 考虑如果要将两种矩形放在同一 ...