Golang的socket编程(二):简单client

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

一、概述

上一篇介绍了基本的函数和结构类型,这里就可以开始写服务端和客户端通信小程序了,通信的基本的流程如下:

如果服务端使用Listen 来监听,那么可以不用ResolveTCPAddr 函数。

现在我们就来写一个server和client,实现功能:client发送数据到server,server将数据转成大写后返回。

二、服务端实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package main
import (
"net"
"fmt"
"strings"
)
func main(){
tcpAddr, err := net.ResolveTCPAddr("tcp4", "localhost:8080") //创建一个TCPAddr
if err != nil{
fmt.Println(err)
return
}
tcpLinstener, err := net.ListenTCP("tcp4", tcpAddr) //开始监听
if err != nil{
fmt.Println(err)
return
}
fmt.Printf("Start listen:[%s]", tcpAddr)
tcpCoon, err := tcpLinstener.AcceptTCP() //阻塞,等待客户端连接
if err != nil{
fmt.Println(err)
return
}
defer tcpCoon.Close() //记得关闭连接对象
data := make([]byte, 2048)
n, err := tcpCoon.Read(data) //客户端连接后,开始读取数据
if err != nil{
fmt.Println(err)
return
}
recvStr := string(data[:n])
fmt.Println("Recv:", recvStr)
tcpCoon.Write([]byte(strings.ToUpper(recvStr))) //转换成大写后返回客户端
}

开启服务端,进入监听状态等待客户端连接:

三、客户端实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package main
import (
"net"
"fmt"
)
func main(){
tcpAddr, err := net.ResolveTCPAddr("tcp4", "localhost:8080") //TCP连接地址
if err != nil{
fmt.Println(err)
return
}
tcpCoon, err := net.DialTCP("tcp4", nil, tcpAddr) //建立连接
if err != nil{
fmt.Println(err)
return
}
defer tcpCoon.Close() //关闭
sendData := "helloworld"
n, err := tcpCoon.Write([]byte(sendData)) //发送数据
if err != nil{
fmt.Println(err)
return
}
fmt.Printf("Send %d byte data success: %s", n, sendData)
recvData := make([]byte, 2048)
n, err = tcpCoon.Read(recvData) //读取数据
if err != nil{
fmt.Println(err)
return
}
recvStr := string(recvData[:n])
fmt.Printf("Response data: %s", recvStr)

运行客户端,服务端将会响应客户端请求:

服务端状态如下:

至此,一个完成的server和clinet就完成了


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

本文来自:server | 马谦的博客

感谢作者:server | 马谦的博客

查看原文:Golang的socket编程(二):简单client

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

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