Go语言 之Socket简单C/S模型通信

Posted 样子2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言 之Socket简单C/S模型通信相关的知识,希望对你有一定的参考价值。

服务端:

package main

import (
"fmt"
"net"
)

func main()
listen, err := net.Listen("tcp", ":8000")
if err != nil
fmt.Println(err.Error())
return

defer listen.Close()

fmt.Println("等待客户端连接")
conn, err := listen.Accept()
if err != nil
fmt.Println(err.Error())
return

defer conn.Close()
//读取数据
fmt.Println("开始读取数据")
b := make([]byte, 1024)
n, _ := conn.Read(b)
fmt.Println(conn.RemoteAddr().String() + ": 读到的数据为" + string(b[:n]))

Listen函数:

func Listen(network, address string) (Listener, error)

network:选用的协议:TCP、UDP, 如:“tcp”或 “udp”

address:IP地址+端口号,  如:“127.0.0.1:8000”或 “:8000”

Listener 接口:

type Listener interface

Accept() (Conn, error)

Close() error

Addr() Addr

Conn 接口:

type Conn interface

Read(b []byte) (n int, err error)

Write(b []byte) (n int, err error)

Close() error

LocalAddr() Addr

RemoteAddr() Addr

SetDeadline(t time.Time) error

SetReadDeadline(t time.Time) error

SetWriteDeadline(t time.Time) error

客户端:

package main

import (
"fmt"
"net"
)

func main()
//创建客户端
listen, err := net.Dial("tcp", ":8000")
if err != nil
fmt.Println(err.Error())
return

defer listen.Close()
var str string = "haha"
buf := []byte(str)
listen.Write(buf)

Dial函数:

func Dial(network, address string) (Conn, error)

network:选用的协议:TCP、UDP,如:“tcp”或 “udp”

address:服务器IP地址+端口号, 如:“121.36.108.11:8000”或 “www.itcast.cn:8000”

Conn 接口:

type Conn interface

Read(b []byte) (n int, err error)

Write(b []byte) (n int, err error)

Close() error

LocalAddr() Addr

RemoteAddr() Addr

SetDeadline(t time.Time) error

SetReadDeadline(t time.Time) error

SetWriteDeadline(t time.Time) error




以上是关于Go语言 之Socket简单C/S模型通信的主要内容,如果未能解决你的问题,请参考以下文章

C/S模型之命名管道

Go CSP并发模型

go语言并发之MPG模型

go语言快速入门 IPC之管道通信 8

python之socket编程

golang学习十:网络编程