golang 使用unixsocket交换数据 socket
来源:互联网 发布:淘宝店铺手抄报 编辑:程序博客网 时间:2024/05/29 17:39
// author songaimin@outlook.com 20170623// golang 使用unixsocket交换数据// 单元测试示例:// package utils// import (// "fmt"// u "lpaiche.com/utils"// // "os"// "testing"// "time"// )// func TestServer(t *testing.T) {// //声明unixsocket// us := u.NewUnixSocket("/tmp/us.socket")// //设置服务端接收处理// us.SetContextHandler(func(context string) string {// fmt.Println(context)// now := time.Now().String() + "sssssss"// return now// })// //开始服务// go us.StartServer()// time.Sleep(time.Second * 30)// }// func TestClient(t *testing.T) {// //声明unixsocket// us := u.NewUnixSocket("/tmp/us.socket")// //发送数据unixsocket并返回服务端处理结果// r := us.ClientSendContext("eeeeeee")// fmt.Println("===============" + r)// }package utilsimport ( "fmt" "net" "os" "time")type UnixSocket struct { filename string bufsize int handler func(string) string}func NewUnixSocket(filename string, size ...int) *UnixSocket { size1 := 10480 if size != nil { size1 = size[0] } us := UnixSocket{filename: filename, bufsize: size1} return &us}func (this *UnixSocket) createServer() { os.Remove(this.filename) addr, err := net.ResolveUnixAddr("unix", this.filename) if err != nil { panic("Cannot resolve unix addr: " + err.Error()) } listener, err := net.ListenUnix("unix", addr) defer listener.Close() if err != nil { panic("Cannot listen to unix domain socket: " + err.Error()) } fmt.Println("Listening on", listener.Addr()) for { c, err := listener.Accept() if err != nil { panic("Accept: " + err.Error()) } go this.HandleServerConn(c) }}//接收连接并处理func (this *UnixSocket) HandleServerConn(c net.Conn) { defer c.Close() buf := make([]byte, this.bufsize) nr, err := c.Read(buf) if err != nil { panic("Read: " + err.Error()) } // 这里,你需要 parse buf 里的数据来决定返回什么给客户端 // 假设 respnoseData 是你想返回的文件内容 result := this.HandleServerContext(string(buf[0:nr])) _, err = c.Write([]byte(result)) if err != nil { panic("Writes failed.") }}func (this *UnixSocket) SetContextHandler(f func(string) string) { this.handler = f}//接收内容并返回结果func (this *UnixSocket) HandleServerContext(context string) string { if this.handler != nil { return this.handler(context) } now := time.Now().String() return now}func (this *UnixSocket) StartServer() { this.createServer()}//客户端func (this *UnixSocket) ClientSendContext(context string) string { addr, err := net.ResolveUnixAddr("unix", this.filename) if err != nil { panic("Cannot resolve unix addr: " + err.Error()) } //拔号 c, err := net.DialUnix("unix", nil, addr) if err != nil { panic("DialUnix failed.") } //写出 _, err = c.Write([]byte(context)) if err != nil { panic("Writes failed.") } //读结果 buf := make([]byte, this.bufsize) nr, err := c.Read(buf) if err != nil { panic("Read: " + err.Error()) } return string(buf[0:nr])}
阅读全文
1 0
- golang 使用unixsocket交换数据 socket
- yii2 redis 使用 unixSocket
- golang http client使用unix domain socket
- android网络通信,与socket交换数据
- 使用Socket控制前后端的数据交换和Web应用的资源消耗
- android实现手机通过蓝牙连接使用socket与芯片进行数据交换
- 使用rotate交换前后数据
- 使用SOAP标题交换数据
- 使用JSON进行数据交换
- 数据交换工具DataX使用
- 使用golang抓取京东商品数据
- 使用golang从雅虎抓取股票交易数据
- golang Socket编程
- golang socket 例子
- 使用ioctl与内核交换数据
- 使用ioctl与内核交换数据
- 使用ioctl与内核交换数据
- 使用 C++ 处理 JSON 数据交换格式
- might——sleep spinlock
- Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
- Codeforces I_love_%username%
- $(document).ready() 与window.onload的区别
- 微信扫描打开APP下载链接提示代码案例源码
- golang 使用unixsocket交换数据 socket
- OpenStack Gluon
- Ubuntu 14.04 mapnik-jni 2.2.0编译
- Makefile(2)加了一些新东西
- JPA hql各种基本用法 通过EntityManager
- hdu 1010 奇偶剪枝
- PHP 记录访客的浏览信息
- 前端页面实现语音播报功能
- 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。