`

golang first network program example code (for archvie)

 
阅读更多
package main

import "fmt"

import "net"
import "net/http"
import "net/url"

//import "bufio"

import "io/ioutil"

import "bytes"
import "encoding/binary"

//import "compress/gzip"
//import "testing"

import "encoding/json"

import b64 "encoding/base64"

//import (
//	//"code.google.com/p/mahonia"
//	"fmt"
//	"net"
//	"os"
//	"strings"
//)

func main() {
	fmt.Println("Hello, 世界")
	//resp, err := http.Get("http://www.baidu.com");

	//payload := []byte("testing")
	//body := bytes.NewBuffer(payload)
	//res, err := http.Post("http://192.168.2.152/sanguo-tookit/Protocol?command=1000",
	//	"application/x-www-form-urlencoded", body)
	//fmt.Println(res)
	//fmt.Println(err)

	v := make(url.Values)
	v.Set("command", "1000")
	res, err := http.PostForm("http://192.168.2.152/sanguo-tookit/Protocol", v)
	fmt.Println(res)
	fmt.Println(err)

	if err != nil {
		fmt.Println(err.Error())
		return
	}

	result, err := ioutil.ReadAll(res.Body)
	res.Body.Close()

	if err != nil {
		fmt.Println(err.Error())
		return
	}

	fmt.Printf("%s", result)

	////result, err := ioutil.ReadAll(res.body)
	//res, err := http.Get("http://www.baidu.com")
	//fmt.Println(res)
	//fmt.Println(err)

	byt := []byte(result)

	var dat map[string]string

	if err := json.Unmarshal(byt, &dat); err != nil {
		panic(err)
	}
	fmt.Println("=======================")
	fmt.Println(dat["body"])

	byt1 := []byte(dat["body"])
	fmt.Println(len(byt1))

	uDec, _ := b64.URLEncoding.DecodeString(dat["body"])
	fmt.Println(len(uDec))

	client, err := net.Dial("tcp", "192.168.2.152:9382")
	//client, err := net.Dial("tcp", "61.135.169.105:80")
	if err != nil {
		fmt.Println("server connect error", err.Error())
		return
	}
	fmt.Println("connect server")
	//	defer client.Close()

	//sendMsg := make(uDec)
	respMsg, err := client.Write(uDec)
	if err != nil {
		fmt.Println("message recv error", err.Error())
		return
	}
	fmt.Println(respMsg)

	//client.Read()

	//fmt.Println(bufio.NewReader(client).Buffered())

	//for {
	//}
	data := make([]byte, 49)
	client.Read(data)
	fmt.Println(data)

	aa := data[0]
	fmt.Println(data[0])
	fmt.Println(aa)

	// read fingerprint 4 bytes
	fingerprint := make([]byte, 4)
	copy(fingerprint[:], data[0:4]) // from data to fingerprint
	fmt.Println(fingerprint)
	// read protocol version 1 byte
	protocolVersion := data[4]
	fmt.Println(protocolVersion)
	// read app id 4 bytes (int)
	appIdBytes := make([]byte, 4)
	copy(appIdBytes[:], data[5:9])
	fmt.Println(appIdBytes)
	// read session id 32 bytes (string)
	sessionIdBytes := make([]byte, 32)
	copy(sessionIdBytes[:], data[9:41])
	fmt.Println(sessionIdBytes)
	// read mask length 4 bytes (int)
	maskLengthBytes := make([]byte, 4)
	copy(maskLengthBytes[:], data[41:45])
	fmt.Println(maskLengthBytes)
	// read command id 4 bytes(int)
	commandIdBytes := make([]byte, 4)
	copy(commandIdBytes[:], data[45:49])
	fmt.Println(commandIdBytes)

	commandId := readInt(commandIdBytes)
	fmt.Println(commandId)

	//commandIdBuffer := bytes.NewBuffer(commandIdBytes)
	//var x int32
	//binary.Read(commandIdBuffer, binary.BigEndian, &x)
	//fmt.Println(x)

	//data := make([]byte, 1024)
	//fmt.Println(data)

	//buf := bytes.NewBuffer(data) // b is []byte
	//finger := make([]byte, 49)
	//fmt.Println("=====fff======")
	//binary.Varint(finger)
	//fmt.Println(finger)

	//myfirstint, err := binary.ReadVarint(buf)
	////anotherint, err := binary.ReadVarint(buf)
	//fmt.Println(myfirstint)
	////fmt.Println(anotherint)

	////data, err := read(client, 256)
	////fmt.Println("===========")
	////fmt.Println(len(data))
}

func readInt(src []byte) int32 {
	readBuffer := bytes.NewBuffer(src)
	var intValue int32
	binary.Read(readBuffer, binary.BigEndian, &intValue)
	return intValue
}

func read(conn net.Conn, length int) ([]byte, error) {
	data := make([]byte, length)
	buf_size := 1024
	buf := make([]byte, buf_size)
	i := 0
	for {
		if length < buf_size {
			if length == 0 {
				return data, nil
			}
			remain := make([]byte, length)
			r, err := conn.Read(remain)
			if err != nil {
				return nil, err
			}
			copy(data[i:(i+r)], remain[0:r])
			i += r
			length -= r
		} else {
			r, err := conn.Read(buf)
			if err != nil {
				return nil, err
			}
			copy(data[i:(i+r)], buf[0:r])
			i += r
			length -= r
		}

	}
	return data, nil
}

 

分享到:
评论

相关推荐

    golang-swaggerui-example:Golang的SwaggerUI生成示例

    golang-swaggerui-example Golang-swaggerui-example是一个示例存储库,用于在您的Golang项目中使用SwaggerUI设置API文档。 详细说明可在。 API互动 可以通过访问localhost:8080 / swaggerui /访问SwaggerUI,有关...

    golang-test-example

    本项目“golang-test-example”是一个关于Go语言的测试示例,旨在帮助开发者理解和掌握Go语言的测试实践。 1. **Go语言基础** - **语法特性**:Go语言具有简洁的语法,包括C风格的结构体、函数和类型定义,以及...

    The-Golang-Standard-Library-by-Example-master.zip

    《Golang标准库实战》是针对Go语言标准库的一份详细教程,旨在通过实例帮助开发者深入理解并掌握Go语言的标准库。在这个压缩包中,包含了完整的项目源代码和相关示例,让学习者能够直接动手实践,提升对Go语言标准库...

    golang-swig-example:golang 的 swig 示例代码

    golang 的 Swig 示例。 入门 $ go get github.com/bluele/golang-swig-example 测试 $ go test PASS ok github.com/bluele/golang-swig-example 0.042s

    VS code & golang 安装篇

    介绍vs code 集成golang开发环境的安装方式

    idea golang插件-for idea 173.4548

    【标题】"idea golang插件-for idea 173.4548" 提供的是针对IntelliJ IDEA的一款专业Golang开发插件,专为版本号173.4548.28的企业版IDEA设计。这个插件的出现,使得在IntelliJ IDEA中编写、调试和管理Go语言项目变...

    vscode&golang 环境配置

    该配置过程主要涉及到安装 Git、VS Code 和 Go 插件,设置 GOPATH 环境变量,创建项目目录,编写简单的 Golang 代码,并配置 VS Code 开发环境。 首先,我们需要安装 Git、VS Code 和 Go 插件。Git 是一个版本控制...

    golang-templates-example:一个简单的Golang模板示例

    一个简单的Golang模板示例 在学习Golang模板的过程中,某些方面令我感到困惑。 这个小仓库的目的是记录我最终要做的事情。 希望此回购可以作为至少一种有效使用模板的方式的示例。 绝不是要在Golang模板上做一个正确...

    用golang编写的教程式FORTH实现.zip

    本教程将探讨如何使用Golang来实现一个FORTH系统,这是一个非常有趣的编程实践,可以帮助我们理解Golang语言的底层机制以及FORTH的工作原理。 在Golang中实现FORTH,首先我们需要了解FORTH的基本结构。FORTH是一种...

    GOLANG IDE FOR MAC

    gogland-173.3188.63.dmg, GOLANG最好用的IDE, 需要的同学下载吧!

    计算机语言 golang 服务器+客户端 聊天chat系统 code

    1、该资源针是用golang语言写成,分为两部分:服务器端和客户端,进行连接即时通讯 2、golang语言基础,易于理解,新手可以作为参考学习 3、功能包含: 登录、注册、登录通知、点对点通讯、群聊通讯、在线通知、...

    用golang实现的一个轻量级noSQL数据库,支持redis命令的一个常用小子集.zip

    标题中的“用golang实现的一个轻量级noSQL数据库,支持redis命令的一个常用小子集”表明,这是一个基于Golang编程语言构建的轻量级非关系型数据库(NoSQL)系统,它部分兼容Redis命令。这通常意味着该数据库系统提供...

    Api-golang-gin-realworld-example-app.zip

    Api-golang-gin-realworld-example-app.zip,使用golang gingolang/gin代码库构建的示例性真实世界应用程序,包含遵循真实世界规范和api的真实世界示例(crud、auth、高级模式等)。,一个api可以被认为是多个软件设备...

    基于Golang语言结合领域驱动设计(DDD) 实现o2o业务模型项目源码

    本项目是采用Golang编程语言实现的一个基于领域驱动设计(Domain-Driven Design,简称DDD)的O2O(Online To Offline)业务模型。这个模型旨在为线上商店与线下门店提供全面的服务,包括但不限于多渠道管理、多门店...

    Go-weixin-golang-sdk微信golang工具包

    weixin-golang-sdk 微信golang工具包

    golang爬虫第一版代码

    在IT行业中,编程语言Go(Golang)以其高效、简洁和强大的并发能力逐渐成为开发后端服务和网络爬虫的热门选择。本篇文章将详细解析一个基于Golang编写的初级网络爬虫的第一版代码,旨在帮助初学者理解Golang爬虫的...

    Golang实现字符串倒序的几种解决方案

    本文主要给大家介绍了关于Golang实现字符串倒序的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 字符串倒置如下: Hello World –&gt; dlroW olleH 解决方案1: length := len(str) ...

    golang-worker-example:缓冲通道示例+工作程序示例

    golang-worker-example 缓冲通道示例+工作程序示例 建筑与跑步 构建项目: go build -o queued . 要启动工作程序,请运行: ./queued 要发出命令,请运行: curl -v -X POST "localhost:8000/work?delay=1s&name...

    alexa golang 授权认证代码

    【标题】:Alexa Golang 授权认证代码 在Alexa Voice Service (AVS)的开发过程中,确保设备能够安全地与Amazon服务器进行交互是非常关键的一环。这通常涉及到一个授权流程,允许用户将他们的Amazon账户连接到你的...

    Golang Windows 1.19.1版本安装包

    Golang Windows 1.19.1版本安装包

Global site tag (gtag.js) - Google Analytics