GithubHelp home page GithubHelp logo

npwg_zh's Introduction

NPWG_zh

Network programming with Go 中文翻译版本

翻译组成员

人名不分先后,是按照QQ群里面的成员名字顺序排列的:

  • 欧林猫
  • Asta谢
  • Lua
  • 四月份平民
  • 轩脉刃
  • JessonChan
  • KETQI
  • RaiDen
  • Wayne_Lau
  • 打柴人
  • 飛鱼
  • 士豆口
  • 吴文磊
  • Border
  • 微尘
  • chenzhekl

翻译计划

章节 第一翻译者 First Review 最终 Review 负责人
第一章:Architecture 欧林猫 Asta谢 Lua 四月份平民
第二章:Overview of the Go language Asta谢
2012/12/27
Lua 四月份平民 轩脉刃
第三章:Socket-level Programming Lua 四月份平民 轩脉刃 JessonChan
第四章:Data serialisation 四月份平民 轩脉刃 JessonChan KETQI
第五章:Application-Level Protocols 轩脉刃 JessonChan KETQI RaiDen
第六章:Managing character sets and encodings JessonChan KETQI RaiDen Wayne_Lau
第七章:Security KETQI RaiDen Wayne_Lau 打柴人
第八章:HTTP RaiDen Wayne_Lau 打柴人 飛鱼
第九章:Templates Wayne_Lau 打柴人 飛鱼 士豆口
第十章:A Complete Web Server 打柴人 飛鱼 士豆口 吴文磊
第十一章:HTML 飛鱼 士豆口 吴文磊 Border
第十二章:XML 士豆口 吴文磊 Border 微尘
第十三章:Remote Procedure Call 吴文磊 Border 微尘 欧林猫
第十四章:Network channels chenzhekl 微尘 欧林猫 Asta谢
第十五章:Web Sockets 微尘 欧林猫 Asta谢 四月份平民

翻译格式

第一翻译、first review和最终Review的人需要保留英文

  • 英文里面<p></p>为一个段落,那么把这一段修改成<p class="en"></p>,那么相应的中文也是一个段落<p class="zh"></p>

      <p>Please go to the <a href="..">main index</a> for the content pages for network computing.</p>
    

    那么加上中文之后应该如下:

      <p class="en">Please go to the <a href="..">main index</a> for the content pages for network computing.</p>
      <p class="zh">请访问<a href="..">主页</a>获取网络编程的其他页面</p>
    
  • 英文里面<h2></h2>为一个层,首先需要给这个层加上class="en",然后那么相应的中文为<h2 class="zh"></h2>

      <h2 id="heading_id_3">Introduction</h2>
    

    那么加上中文应该如下:

      <h2 id="heading_id_3" class="en">Introduction</h2>
      <h2 id="heading_id_3" class="zh">介绍</h2>
    
  • 英文里面<ul></ul>为一个列表,首先对原来的ul增加一个class="en",然后相应的中文为<ul class="zh"></ul>

      <ul>
      <li><a href="http://golang.org/doc/install.html">Getting started</a></li>
    
      <li><a href="http://golang.org/doc/go_tutorial.html">A Tutorial for the Go Programming Language</a></li>
    
      <li><a href="http://golang.org/doc/effective_go.html">Effective Go</a></li>
      </ul>
    

    那么加上中文之后应该如下:

      <ul class="en">
      <li><a href="http://golang.org/doc/install.html">Getting started</a></li>
    
      <li><a href="http://golang.org/doc/go_tutorial.html">A Tutorial for the Go Programming Language</a></li>
    
      <li><a href="http://golang.org/doc/effective_go.html">Effective Go</a></li>
      </ul>
      <ul class="zh">
      <li><a href="http://golang.org/doc/install.html">安装入门</a></li>
    
      <li><a href="http://golang.org/doc/go_tutorial.html">Go程序设计入门</a></li>
    
      <li><a href="http://golang.org/doc/effective_go.html">Go高级编程</a></li>
      </ul>
    

翻译约定

有些专用词无需翻译

  • channel
  • goroutine

npwg_zh's People

Contributors

0x0400 avatar astaxie avatar chenzhekl avatar dave1010 avatar fugr avatar html5webos avatar jessonchan avatar jianfengye avatar ketqi avatar netroby avatar olingcat avatar raidenxu avatar veincheng avatar wenlei avatar xiaox0321 avatar yourihua avatar zhuowei avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

npwg_zh's Issues

创建 gh-page 分支,以便在线浏览

由于文档是 html 格式的,而不是 markdown , github 查看到的是 html code。

解决办法:创建项目 github page 支持,合并 master 分支到 gh-page 分支,以方便浏览。master 分支完全可以删除。所有修正直接在 gh-page 上进行。

不需要QQ群

不需要QQ群来交流。QQ群,一、不严肃,不深入。二、没有记录、没法差远以往讨论。需要讨论尽管发issue进行讨论。

| html 怎么用

Pipelines

The above transformations insert pieces of text into a template. Those pieces of text are essentially arbitrary, whatever the string values of the fields are. If we want them to appear as part of an HTML document (or other specialised form) then we will have to escape particular sequences of characters. For example, to display arbitrary text in an HTML document we have to change "<" to "<". The Go templates have a number of builtin functions, and one of these is the function html. These functions act in a similar manner to Unix pipelines, reading from standard input and writing to standard output.

To take the value of the current object '.' and apply HTML escapes to it, you write a "pipeline" in the template

{{. | html}}

在charpter 3 中 `Ping` 代码有问题,具体问题,把代码弄来跑一下就知道了,但是我想咨询各位大佬另外一个问题

下列代码是我copy的 Ping 那个demo然后做了一些修改而成

这代码我在本地的mac上跑是有问题的, 但是在linux上跑就是正确的:

mac 系统版本为 1.15.5
go 版本为 1.13.8 和 1.15.5 都试过

原文在: https://github.com/astaxie/NPWG_zh/blob/master/zh/Text/chapter-socket.html 的最底部

package basic

import (
	"fmt"
	"net"
	"os"
	"time"
	"encoding/hex"
)

func Ping() {
	if len(os.Args) != 2 {
		fmt.Println("Usage: ", os.Args[0], "host")
		os.Exit(1)
	}

	addr, err := net.ResolveIPAddr("ip", os.Args[1])
	if err != nil {
		fmt.Println("Resolution error", err.Error())
		os.Exit(1)
	}

	var localAddr *net.IPAddr
	if localAddr == nil {
		conn, err := net.Dial("tcp", "www.baidu.com:80")
		checkError(err)

		localAddr, err = net.ResolveIPAddr("ip4", conn.LocalAddr().(*net.TCPAddr).IP.String())
		checkError(err)
	}

	conn, err := net.DialIP("ip4:icmp", localAddr, addr)
	checkError(err)

	var msg [512]byte
	msg[0] = 8  // echo
	msg[1] = 0  // code 0
	msg[2] = 0  // checksum, fix later
	msg[3] = 0  // checksum, fix later
	msg[4] = 0  // identifier[0]
	msg[5] = 13 //identifier[1]
	msg[6] = 0  // sequence[0]
	msg[7] = 37 // sequence[1]
	length := 8

	check := CheckSum(msg[0:length])
	msg[2] = byte(check >> 8)
	msg[3] = byte(check & 255)
	startTime := time.Now()
	_, err = conn.Write(msg[0:length])
	checkError(err)

	n, err := conn.Read(msg[0:])
	checkError(err)
	fmt.Printf("raw ip msg: %v \n", hex.EncodeToString(msg[:n]))
	endTime := time.Now()
	result := make([]byte, n)
	if n > 20 {
		result = msg[20:]
	}

	fmt.Println("Got response")
	if result[5] == 13 {
		fmt.Println("identifier matches")
	}
	if result[7] == 37 {
		fmt.Println("Sequence matches")
	}
	fmt.Println("ip packet: ", msg[:n], "length: ", n)
	ipHeadLength := int(msg[0]) & 15 * 4
	fmt.Printf("ip header length: %v \n", ipHeadLength)
	fmt.Printf("ip len %x %x \n", msg[2], msg[3]) // 重点在这里,我发现在mac系统上,我用wirshark 抓包抓到的数据和这里读到的数据是不一样的
	totalLength := int(msg[2])<<8 + int(msg[3])
	fmt.Printf("ip total length: %v \n", totalLength)
	ipDataLength := totalLength - ipHeadLength
	fmt.Println("icmp packet: ", result[:ipDataLength])
	t := endTime.Sub(startTime)
	fmt.Printf("time: %.3f ms\n", float64(t.Microseconds())/1000)
}

// 原文中的计算校验和的代码是有问题的,这里我换成了另外的,这个函数是没有问题的
func CheckSum(data []byte) uint16 {
	var (
		sum    uint32
		length int = len(data)
		index  int
	)
	//以每16位为单位进行求和,直到所有的字节全部求完或者只剩下一个8位字节(如果剩余一个8位字节说明字节数为奇数个)
	for length > 1 {
		sum += uint32(data[index])<<8 + uint32(data[index+1])
		index += 2
		length -= 2
	}
	//如果字节数为奇数个,要加上最后剩下的那个8位字节
	if length > 0 {
		sum += uint32(data[index])
	}
	//加上高16位进位的部分
	sum += (sum >> 16)
	//别忘了返回的时候先求反
	return uint16(^sum)
}

这是代码获取到的IP 报文的结果:

=== RUN   TestPing
host:  [103.235.46.39]
raw ip msg: 4500080038c700002f01103e279c454f0a01cbf00000ffcd000d0025
Got response
identifier matches
Sequence matches
ip packet:  [69 0 8 0 56 199 0 0 47 1 16 62 39 156 69 79 10 1 203 240 0 0 255 205 0 13 0 37] length:  28
ip header length: 20
ip len 8 0
ip total length: 2048
--- FAIL: TestPing (0.36s)
panic: runtime error: slice bounds out of range [:2028] with capacity 492 [recovered]
	panic: runtime error: slice bounds out of range [:2028] with capacity 492

用wirshark 抓到的包: IP包 起始位置为第一行的: 45 00

0000   00 e0 4c 6b 10 e0 3c f5 cc 71 88 01 08 00 45 00
0010   00 1c 38 c7 00 00 2f 01 10 3e 27 9c 45 4f 0a 01
0020   cb f0 00 00 ff cd 00 0d 00 25 00 00 00 00 00 00
0030   00 00 00 00 00 00 00 00 00 00 00 00

image

这是不是go的一个bug??

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.