`

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网络编程

    Golang(Go语言)作为一门现代编程语言,因其简洁高效的特点,在网络编程领域表现尤为突出。本文将详细介绍Golang网络编程的基础知识与核心概念。 #### 二、网络编程基础 ##### 1. 协议层 网络通信是通过多层协议...

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

    ### Go语言网络编程知识点概述 本文档主要介绍了Go语言中的网络编程基础知识,涵盖了Socket编程、HTTP客户端与服务器的实现方式,以及如何通过Go语言进行RPC(远程过程调用)和JSON数据交换等实用技巧。此外,还...

    go网络编程

    Go语言提供了一种简洁、高效的网络编程方式,使得开发者可以快速地构建网络应用。 Go语言的网络编程模型基于TCP/IP协议和UNIX套接字。Go语言标准库中的net包提供了对TCP、UDP、IP以及UNIX套接字的抽象,使得开发者...

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

    在本文中,我们将深入探讨Go语言在网络编程中的应用,基于提供的`go网络测试代码.go`...具体的`go网络测试代码.go`中的实现细节,需要查看源代码才能深入了解,但以上内容已经涵盖了Go语言网络编程的基础知识和关键点。

    Go:Go网络编程实践

    ##### 1.2 Go语言网络编程概述 Go语言,又称为Golang,是一种由Google设计和开发的静态类型、编译型的语言。Go语言的一大特点是内置了强大的网络编程支持,这使得开发者可以轻松构建高性能的网络应用。 Go语言的...

    Go语言网络编程-v0.0.2

    本教程“Go语言网络编程-v0.0.2”将深入探讨Go语言在网络编程领域的应用。 一、Go语言基础 Go语言的核心特性包括简洁的语法、内置并发机制、类型系统和垃圾回收。它的语法接近C语言,但增加了许多现代编程语言的...

    Go语言基础语法+Go语言进阶特性+Go语言并发编程+Go语言网络编程+Go语言Web开发基础+Go语言Web框架实战全套教程

    Go语言网络编程 Go语言Web开发基础 Go语言Web框架实战 Go语言数据库交互 Go语言性能优化 Go语言错误处理与测试 Go语言构建工具与包管理 Go语言反射与接口 Go语言与微服务架构 Go语言在云原生环境的应用 Go语言安全...

    Go网络编程:Go网络编程

    《Go网络编程》是一本专注于使用Go语言进行网络编程的专著,主要涵盖了Go语言在网络编程领域的核心概念、工具和实践技巧。...无论是初学者还是有经验的开发者,都能从中受益匪浅,提升自己的Go语言网络编程技能。

    Go语言网络编程:net包的深度探索与实践

    ### Go语言网络编程:net包的深度探索与实践 #### Go语言概述 Go语言,也称为Golang,是由Google开发并开源的一种编程语言。它具备静态类型和编译型的特点,设计之初的目标是为了提高编程效率并解决现代多核处理器...

    Go语言基础语法+Go语言进阶特性+Go并发编程模型+Go网络编程实践+Go数据库交互技术+Go语言构建Web应用等全套教程

    Go网络编程实践 Go数据库交互技术 Go语言构建Web应用 Go语言与微服务架构 Go语言性能优化 Go语言错误处理与测试 Go语言反射与接口 Go语言标准库深度解析 Go语言工具链使用 Go语言项目实战 Go语言社区与生态 Go语言...

    go语言高级编程_cut6zj_go语言_Go_golang_golang高级编程_

    Go语言,又称Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的、C风格的编程语言。它在设计时兼顾了开发效率和系统性能,因此在云计算、微服务和网络编程等领域得到广泛应用。 书中的内容...

    Go语言编程_许式伟_完整版1

    除此之外,书中还涵盖了网络编程、错误处理、内存管理、垃圾回收等重要主题,这些都是Go语言在实际开发中不可或缺的部分。此外,书中还讨论了如何进行安全编程,帮助开发者避免常见的安全漏洞。 总的来说,《Go语言...

    Go语言高级编程

    Go语言之所以被称为网络和多核时代的C语言,是因为它从C语言继承并发扬了多种编程思想,包括表达式语法、控制流结构、基础数据类型、调用参数传值、指针等,并在并发编程上进行了革命性的创新。 Go语言的发展历史...

    Go语言在网络编程中的高效应用与实践

    Go语言,以其在并发处理和简洁语法方面的优势,成为了网络编程领域的热门选择。本文将深入探讨Go语言在网络编程中的应用,包括TCP/IP套接字编程、HTTP服务器和客户端的实现,以及使用现代网络框架如Gin和gRPC进行...

    Go编程语言Go编程语言Go编程语言Go编程语言Go编程语言Go编程语言Go编程语言Go编程语言.zip

    Go语言的设计灵感来源于C语言,但同时引入了垃圾回收、并发编程和类型安全性等现代特性,使得它在系统编程、网络编程以及云计算等领域得到了广泛应用。 Go语言的主要特点包括: 1. **简洁性**:Go语言语法简洁明了...

Global site tag (gtag.js) - Google Analytics