Golang中socket套接字(上)

Posted 2019ab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang中socket套接字(上)相关的知识,希望对你有一定的参考价值。

server与client基础通信

1. 网络分层

2.socket

socket-server DEMO

只能接收一次连接,只能发送一次数据

package main 

import (
	"fmt"
	"net"
	"strings"
)

func main()
	// 创建监听
	ip := "127.0.0.1"
	port := 8800
	address := fmt.Sprintf("%s:%d",ip,port)

	// func Listen(network,address string) (Listener,error)
	// net.Listen("tcp","8800") // 简写,冒号前面是本机 127.0.0.1
	listener,err := net.Listen("tcp",address)

	if err != nil
		fmt.Println("net.Listen err:",err)
		return 
	
	fmt.Println("监听中...")

	// Accept() (Conn,error)
	conn,err := listener.Accept()
	if err != nil
		fmt.Println("listener.Accept err:",err)
		return
	

	fmt.Println("连接建立成功!")

	// 创建一个容器,用于接收读取到的数据
	buf := make([]byte,1024) // 使用make来创建字节切片,type ==>uint8

	// Read(b []byte) (n int,err error)
	// cnt:真正读取client发来的数据的长度
	cnt,err := conn.Read(buf)

	if err != nil
		fmt.Println("conn.Read err:",err)
		return
	

	fmt.Println("Client =======> Server,长度",cnt,",数据:",string(buf[0:cnt]))

	// 服务器对客户端请求进行相应,将数据转换成大写 “hello" ==> HELLO
	// func ToUpper(s string) string 
	upperData := strings.ToUpper(string(buf[0:cnt]))

	// Write(b []byte) (n int,err error)
	cnt,err = conn.Write([]byte(upperData))
	fmt.Println("Client <======== Server,长度:",cnt,",数据:",upperData)

	// 关闭连接
	conn.Close()



client DEMO

package main 

import (
	"fmt"
	"net"
)

func main()
	conn,err := net.Dial("tcp",":8800")
	if err != nil
		fmt.Println("net.Dial err: ",err)
		return
	

	fmt.Println("cliet与server连接建立成功!")
	sendData := []byte("helloworld")
	// 向服务器发送数据
	cnt,err := conn.Write(sendData)

	if err != nil 
		fmt.Println("conn.Write err:",err)
		return
	

	fmt.Println("Client ===> Server cnt:",cnt,",data:",string(sendData))

	// 接收服务器返回的数据
	// 创建buf,用于接收服务器返回的数据
	buf := make([]byte,1024)
	cnt,err = conn.Read(buf)
	if err != nil
		fmt.Println("conn.Read err:",err)
		return
	

	fmt.Println("Client <==== Server,cnt:",cnt,",data:",string(buf[0:cnt]))

	conn.Close()

感谢大家观看,我们下次见

以上是关于Golang中socket套接字(上)的主要内容,如果未能解决你的问题,请参考以下文章

Golang 中的安全关闭连接

golang中怎么处理socket长连接

golang socket与Linux socket比较分析

在Python中,当在localhost上接受TCP套接字连接时,无法获得正确的对等体IP地址。

socket开机自启连不上

socket (套接字)