zoukankan      html  css  js  c++  java
  • Go语言中Socket通信TCP服务端

    1、用法:

      (1)定义远程IP地址。使用net.ResolveTCPAddr()方法,定义一个TCP地址,做为本机监听地址。

      (2)使用net.ListenTCP("tcp",localAddress)方法开始监听,并返回tcpListener对像。

      (3)使用tcpListener.AcceptTCP方法进行接受连接。返回:net.TCPConn对像。

      (4)对net.TCPConn对像进行读写操作。

      (5)关闭连接。

    2、代码:

    package main
    
    import (
    	"fmt"
    	"io/ioutil"
    	"net"
    )
    
    func main() {
    	localAddress, _ := net.ResolveTCPAddr("tcp4", "127.0.0.1:8080") //定义一个本机IP和端口。
    	var tcpListener, err = net.ListenTCP("tcp", localAddress)       //在刚定义好的地址上进监听请求。
    	if err != nil {
    		fmt.Println("监听出错:", err)
    		return
    	}
    	defer func() { //担心return之前忘记关闭连接,因此在defer中先约定好关它。
    		tcpListener.Close()
    	}()
    	fmt.Println("正在等待连接...")
    	var conn, err2 = tcpListener.AcceptTCP() //接受连接。
    	if err2 != nil {
    		fmt.Println("接受连接失败:", err2)
    		return
    	}
    	var remoteAddr = conn.RemoteAddr() //获取连接到的对像的IP地址。
    	fmt.Println("接受到一个连接:", remoteAddr)
    	fmt.Println("正在读取消息...")
    	var bys, _ = ioutil.ReadAll(conn) //读取对方发来的内容。
    	fmt.Println("接收到客户端的消息:", string(bys))
    	conn.Write([]byte("hello, Nice to meet you, my name is SongXingzhu")) //尝试发送消息。
    	conn.Close()                                                          //关闭连接。
    }
    

    3、运行效果:

    D:/Application/Go/bin/go.exe build -i [D:/Projects/GoPath/source/demo/socket/server]
    成功: 进程退出代码 0.
    D:/Projects/GoPath/source/demo/socket/server/server.exe  [D:/Projects/GoPath/source/demo/socket/server]
    正在等待连接...
    接受到一个连接: 127.0.0.1:47203
    正在读取消息...
    接收到客户端的消息: GET / HTTP/1.1
    Host: 127.0.0.1:8080
    Connection: keep-alive
    Pragma: no-cache
    Cache-Control: no-cache
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: zh-CN,zh;q=0.8
    
    
    成功: 进程退出代码 0.
    

      

    使用浏览器做辅助测试。

  • 相关阅读:
    Linux常用命令
    关于MUI v0.18.0版本 Table组件里的复选框不能选的解决方案
    React---点击按钮实现内容复制功能
    js作用域相关笔记
    React监听窗口变化事件
    Express搭建NodeJS项目
    react +MUI checkbox使用
    React鼠标事件
    初入React(一)
    彻底搞懂hashCode与equals的作用与区别及应当注意的细节
  • 原文地址:https://www.cnblogs.com/songxingzhu/p/5256196.html
Copyright © 2011-2022 走看看