TCP服务器

Golang实现简单tcp服务器01 -- 概述

女生的网名这么多〃 提交于 2020-01-07 07:27:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 概述 Golang作为一门近些年来非常风光的开发语言, 其实用范围很广, 图形界面, web框架, 图像引擎等等. 由于其语言特性简化了并发/多核的开发, 受到了很大的关注. 而使用它进行服务器开发, 也是非常高校而简洁的. 废话不多说, 本项目实践的目的是使用golang开发一个简单的基于tcp协议的服务器/客户端. 预备知识 首先, 我们需要了解一下golang下的如下包与特性: goroutine goroutine是一种轻量型的线程, 作为golang语言的语言特性, 可以很简单的在golang中进行多线程的开发. 利用go关键字, 我们能把任何一个方法/函数, 放在一个新的goroutine里执行. 实验01: 在 实验环境 的 主文件夹 里, 建立一个名为test.go的文本文档, 并开始编写以下代码 package main import ( "fmt" ) var quit chan bool = make(chan bool) func main() { go testGorountine() <-quit } func testGorountine() { for i := 0; i < 10; i++ { fmt.Println("Hello world!") } quit <- true

linux下使用select I/O复用和多线程编程实现简单的TCP服务器

馋奶兔 提交于 2019-12-04 04:48:31
I/O 复用之Select模型 I/O 复用使得程序能够同时监听多个文件描述符,但是,他本身也是阻塞的,并且当一个或多个文件描述符准备就绪时,如果不采用其他措施,程序只能按顺序处理其中的每个文件描述符。如果要使程序能够并行运行,只能使用多进程或多线程的方式。 Linux 下实现I/O复用的系统调用主要有select、poll和epoll,下面将详细介绍select的系统调用。 Select 系统调用的用途:在一段时间内,监听用户感兴趣的文件描述符上面的可读、可写和异常等事件。 相关 API 的介绍: #include <sys/select.h> int select(int nfds, fd_set * readfds, fd_set * writefdds, fd_set * exceptfds, struct timeval * timeout); ① 、 nfds参数:所有监听的文件描述符的最大值 + 1 ② 、 readfds、writefds和exceptfds参数分别为可读、可写和异常等事件对应的文件描述符集合;程序只需要传入自己感兴趣的文件描述符,内核将修改他们来通知程序那些文件描述符已经准备就绪;fd_set结构体仅包含一个整形数组,该数组的每一个元素的每一位标志一个文件描述符,下面的一组宏用来操作fd_set的每一位: FD_ZERO(fd_set *