技术标签: go语言 tcp服务器
使用Go搭建Tcp服务器,数据库使用MongoDB,代码复制修改参数即可使用。
package main
import (
"fmt"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
"net"
)
type Message struct {
_Id bson.ObjectId
Client string
Msg string
}
func main() {
session, coll := ConnectMongo()
defer session.Close()
lner, err := net.Listen("tcp", "192.168.124.65:8080")
if err != nil {
fmt.Println("Listener create error: ", err)
return
}
fmt.Println("Waiting for client...")
for {
conn, err := lner.Accept()
if err != nil {
fmt.Println("Accept error: ", err)
return
}
go handleConnection(coll, conn)
}
}
func handleConnection(coll *mgo.Collection, conn net.Conn) {
clientAddr := conn.RemoteAddr().String()
fmt.Println("Connection success. Client address: ", clientAddr)
defer conn.Close()
for {
buffer := make([]byte, 1024)
recvLen, err := conn.Read(buffer)
if err != nil {
fmt.Println("Read error: ", err, clientAddr)
return
}
strBuffer := string(buffer[:recvLen])
fmt.Println("Client message: ", strBuffer)
InsertMongo(coll, clientAddr, strBuffer)
}
}
func ConnectMongo() (*mgo.Session, *mgo.Collection) {
session, err := mgo.Dial("192.168.8.10:27017")
if err != nil {
panic(err)
}
session.SetMode(mgo.Monotonic, true)
coll := session.DB("tcp_server").C("tcp_data")
return session, coll
}
func InsertMongo(coll *mgo.Collection, client, msg string) {
insertMsg := Message{
Client: client,
Msg: msg,
}
err := coll.Insert(&insertMsg)
if err != nil {
fmt.Println("Insert mongodb error: ", err)
}
}
有疑问加站长微信联系(非本文作者)
文章浏览阅读1.1k次。最新的目标检测的方法I will start with a short introduction of different approaches to object detection. After both traditional and newer approaches are presented, you can read about the most important parts of ..._需要学习的新检测方式
文章浏览阅读84次。为什么80%的码农都做不了架构师?>>> ..._git仓库导入到gitosc
文章浏览阅读871次,点赞23次,收藏24次。在ob_start系统的callback函数中,如果指定的callback函数包含执行代码,那么也可能是执行代码的来源。类似于os.system(),subprocess.call()运行一个命令,等待它完成,然后返回返回码。该函数可以创建一个匿名(匿名)函数,但如果函数的代码是由用户输入构造的,可能会执行不安全的代码。这两个函数可以调用一个用户定义的函数,如果传递的是含有系统命令的字符串,可能被用来执行代码。更复杂的执行外部程序的方法,允许双向通信,读写进程的 STDIN 和 STDOUT。
文章浏览阅读1.1w次,点赞17次,收藏10次。报错信息message:distutils.errors.DistutilsError: Command '['/root/.virtualenvs/xspiderenv/bin/python3', '-m', 'pip', '--disable-pip-version-check', 'wheel', '--no-deps', '-w', '/tmp/tmphyu84kuz', '--quiet', '--index-url', 'http://mirrors.aliyun.com/pypi/sim_distutils.errors.distutilserror: command '['/usr/bin/python3', '-m', 'pip',
文章浏览阅读824次,点赞19次,收藏18次。本文主要针对嵌入式设备测试的一些技巧和测试重点,欢迎各位参考学习
文章浏览阅读437次。正则表达式_re匹配标点
文章浏览阅读1.1k次。作为国内开源大数据领域的引领者,EMR2.0在平台体验、数据开发、产品形态及数据分析等方面做了全面突破与创新,重新定义了新一代开源大数据平台。本文介绍如何利用EMR新平台实现更加低成本、高效率、智能化的大数据集群管控和应用开发。_emr 数据
文章浏览阅读2.3k次,点赞4次,收藏46次。1、复数混频发射机原理上图采用的是上变频复数混频的原理图。IQ链路有自己的混频支路,本振LO功分两路,两路的相位相差90°,两个独立输出随后在求和放大器中求和,产生所需的RF输出。若只输入I路信号x或者Q路信号x,那么输出只会产生LO频率±x的输出;另一路没有输入,输出为静音,最终结果为有信号的一路直接称为RF输出。乍一看没啥差异,其实上面两幅图中有一个相位差异在里面。上图可以观察到:LO频率加输入频率的信号是同相的(上边带),但L..._实数混频和复数混频
文章浏览阅读541次。在处理本文中这些操作之前你得有一个开发者账号(可以从苹果官网申请)1、打开钥匙串,在本地创建证书csr文件CSR文件:生成证书的过程中,有一步是需要我们上传CSR文件的。为什么必须要上传它?CSR文件是用于换取证书的公钥文件,导出CSR这个过程其实就是电脑向证书机构申请凭证的过程。证书是你用电脑制作的并且颁发给你的电脑的。但是这台电脑是否具有制作证书的能力,就是要这个CSR文件来凭证。_创建ios证书文件
文章浏览阅读2w次,点赞4次,收藏43次。本篇博客是 Python 操作 excel 系列的第5篇,前4篇博客阅读地址如下所示:2022 之Python操作 Excel,xlrd 与 xlwt 模块一文掌握Python 操作 Excel,从 xlwings 模块开始Python 操作 Excel 第3篇博客,python openpyxl 模块一文打通python处理excel文件,python xlsxwriter 一文初掌握本篇咱们要学习的模块是 pywin32,该模块主要封装了 Windows 系统的 Win32 API,_python pywin32打印excel为a3
文章浏览阅读999次,点赞23次,收藏15次。基于云计算技术的B/S架构的HIS系统,为医疗机构提供标准化的、信息化的、可共享的医疗信息管理系统,实现医患事务管理和临床诊疗管理等标准医疗管理信息系统的功能。
文章浏览阅读2.8w次,点赞5次,收藏27次。解读PMP考点:快速跟进和赶工的区别赶工和快速跟进都是进度压缩技术。进度压缩技术是指在不缩减项目范围的前提下,通过缩短或加快进度工期,以满足进度制约因素、强制日期或者其他进度目标。赶工和进度压缩的区别 解释 举例 影响分析 赶工 通过增加资源,以最小的成本代价来压缩进度工期的一种技术。 1、批准加班 2、增加额外资源或支付费用,来...