`

go 网络编程

 
阅读更多

首先复习一下go的基本语法
1:变量定义
val 变量 变量类型

val v1 int 
val v2 string
val v3 [10]int  //定义一个int10的数组
val v4 map[string] string //定义一个字典 key为string value也为string
val v5 func(a int) int  //v5指向一个函数

 可以更简单一些,根据数据推断类型,如下:

v6 := 90
v7 := "hello china"

 匿名变量  _,_,name := GetName()
    如果调用一个方法返回多个变量,有些变量不使用,可以用——代替
常量 const mark = 1<<3

 

 

go server

package main

/*
*go server
*can be serve as chat,game,file trans server
*also can be serve as proxy server
*surpport protocal :http tcp udp ftp https sock5 and so on
*
*************************************************************************/

import (
	"fmt"
	"io"
	"log"
)
import "net"

const addr = "127.0.0.1:1080"
const bufferSize = 4096
const maxConn = 1000

type bundle struct {
	clientNO int64                   //current client num
	clients  map[string]serverClient //store client in the map,key:client name,value: serverClient
}

func (s bundle) init() {
}

func (s bundle) startNewClient(clientName string, client serverClient) {
	s.clients[clientName] = client
	s.clientNO++
	client.startProcess()
}

type serverClient struct {
	clientName string //client username
	Conn       net.Conn
	//send       chan []byte
	//reply      io.Writer
}

//process client data
func (client serverClient) startProcess() {
	data := make([]byte, bufferSize)
	n, _ := io.ReadFull(client.Conn, data)
	if n > 0 {
		fmt.Println(string(data[0:n]))
	}
	client.Conn.Write([]byte("hello "))
}

//start server,when accept ,let gorountine to process
func startServer() {
	b := new(bundle)
	b.clients = make(map[string]serverClient)

	a, err := net.ResolveTCPAddr("tcp", addr)
	if err != nil {
		log.Fatal(err)
	}
	l, err2 := net.ListenTCP("tcp", a)
	if err2 != nil {
		log.Fatal(err2)
	}

	for {
		c, err3 := l.Accept()
		if err3 != nil {
			log.Fatal(err3)
		}
		fmt.Print("new client from :")
		fmt.Println(c.RemoteAddr())

		ch := serverClient{"1", c}
		go b.startNewClient(c.RemoteAddr().String(), ch)
	}

}

func main() {
	fmt.Println("start server")
	startServer()

}

 go client

package main

import (
	"fmt"
	"io"
	"log"
)
import "net"

const svrAddr = "127.0.0.1:1080"
const clientAddr = "127.0.0.1:2090"
const bufferSize = 4096

type clientBundle struct {
	conn net.Conn
}

func startClient(ch chan int) {
	conn, err := net.Dial("tcp", svrAddr)
	if err != nil {
		log.Fatal(err)
	}
	defer conn.Close()
	b := clientBundle{conn}
	//conn.Write([]byte("hello server"))
	io.WriteString(conn, "sfsf")

	//io.Writer.
	b.processRead()

}

func (b clientBundle) processRead() {
	//data := make([]byte, bufferSize)
	//n, _ := io.ReadFull(b.conn, data)
	//if n > 0 {
	//	fmt.Println(data[:n])
	//}

}

func main() {
	fmt.Println("start client")
	for {

		conns := make(chan int)
		startClient(conns)
	}
	//<-conns
	fmt.Println("finish send")
}

 

分享到:
评论

相关推荐

    Go语言网络编程-v0.0.1.pdf

    Go语言网络编程-v0.0.1

    GO网络编程

    golang网络编程,内容非常好,值得推荐,下载看看增加

    go网络编程

    go网络编程都是网络搜索到的资料.对于go开发者有点参考作用

    go网络测试代码.go Go网络编程

    go网络测试代码.go Go网络编程 【核心代码】 └── go网络测试代码.go go网络测试代码.go Go网络编程

    Go语言网络编程-v0.0.2

    Go语言网络编程-v0.0.2 Go语言网络编程-v0.0.2 Go语言网络编程-v0.0.2

    Go网络编程:Go网络编程

    Go网络编程:Go网络编程

    Go语言网络编程-v0.0.2.pdf

    Go 编程语言是一个使得程序员更加有效率的开源项目。 Go 是有表 达力、简洁、清晰和有效率的。它的并行机制使其很容易编写多核 和网络应用,而新 的类型系统允许构建有 性的模块化程序。Go 编译到机器码非常快速,同时...

    陈硕 网络编程实践

    同时交叉演练使用C++,Python和Go语言进行编码。 课程亮点 1.Google分布式系统专家陈硕担纲主讲 讲师历任摩根士丹利工程师及Google大规模分布式系统专家,同时也是开源C++ 网络库muduo 作者。 2.科学、系统的课程...

    go语言编程_Go_golang_

    Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于...

    Go语言的网络编程简介

    Go语言的网络编程简介

    最新C++网络编程实践视频教程 陈硕

    1.网络编程概要.mkv2.一个TCP的简单实验.mkv3.课程内容大纲.mkv4.回顾基础的Sockets API.mkv5.TTCP代码概览.mkv6.使用TTCP进行网络传输性能测试.mkv7.阻塞IO下的TTCP实验.mkv8.TCP自连接.mkv9.扩展练习.mkv10.时钟...

    go语言中文教程及手册.pdf

    《go语言中文教程及手册》包含了语言结构、基础语法、数据类型、语言变量、语言常量以及运算符等内容的介绍,可以让你快速进阶为go语言编程高手。简洁,一句废话没有,对于初学者可以让大家快速掌握GO语言!

    Go并发编程实战+第2版_Lite.pdf_golang_

    本书首先介绍了Go语言的优秀特性、安装设置方法、工程结构、标准命令和工具、语法基础、数据...最后通过一个完整实例——网络爬虫框架进一步阐述Go语言的哲学和理念,同时分享作者在多年编程生涯中的一些见解和感悟。

    go语言中文手册,标准库手册,教程,圣经打包下载(更新)

    包括以下书籍(html): go标准库文档 Go语言标准库 go指南 go_web编程 Go_基础教程 go语言圣经 Go入门指南 Go网络编程 深入解析Go 通过例子学习Go Go语言博客实践 (pdf书籍) Go 1.5 源码剖析.pdf Go 学习笔记 第四版....

    编程课程+GO语言编程+技术开发+系列课程

    网络编程是Go语言的一大亮点,课程将教授如何使用Go进行HTTP协议编程,创建RESTful API,并探索WebSocket和TCP/UDP编程。此外,课程还将涵盖测试与调试技巧,包括单元测试、基准测试和代码覆盖率分析,以及如何使用...

    go微服务框架网络编程并行编程等网课

    go微服务框架网络编程并行编程评论系统架构设计异常处理等网课,超d老师讲课

Global site tag (gtag.js) - Google Analytics