Goland Socket 服务
客户端发送消息 并接收服务端消息
package main
import (
"fmt"
"net"
)
func main() {
//
conn, err := net.Dial(`tcp`, ":8848")
if err != nil {
fmt.Println(`net dial err:`, err)
return
}
fmt.Println(`cline 与server 建立连接成功`)
sendData := []byte(`hellword`)
// 向服务器发送数据
cnt, err := conn.Write(sendData)
if err != nil {
fmt.Println(`conn.write err:`, err)
return
}
fmt.Println(`Client ==> Server cnt:`, cnt, "data:", string(sendData))
//接受服务器返回数据
buf := make([]byte, 1024)
cnt, err = conn.Read(buf)
if err != nil {
fmt.Println(`conn read err :`, err)
return
}
fmt.Println("Client <=== Server ,cnt:", cnt, "data", string(buf[0:cnt]))
}
单个服务监听
package main
import (
"fmt"
"net"
"strings"
)
func main() {
ip := "127.0.01"
port := 8848
// 创建监听
address := fmt.Sprintf(`%s:%d`, ip, port)
listener, err := net.Listen(`tcp`, address)
if err != nil {
fmt.Println(`net.listen err :`, err)
return
}
fmt.Println(`监听中`)
conn, err := listener.Accept()
if err != nil {
fmt.Println(`listener.Accept err:`, err)
return
}
fmt.Println(`建立连接成功`)
//创建容器 接受读取到到数据
buf := make([]byte, 1024)
cnr, err := conn.Read(buf)
if err != nil {
fmt.Println(`cnr err:`, err)
return
}
fmt.Println(`Client ==> Server,长度`, cnr, "数据:", string(buf[0:cnr]))
//将数据转换成大写
upperData := strings.ToUpper(string(buf))
cnr, err = conn.Write([]byte(upperData))
fmt.Println(`Clinet <====Server,长度`, cnr, "数据:", upperData)
// 关闭
conn.Close()
}
多个socket 服务端监听
package main
import (
"fmt"
"net"
"strings"
)
// socket servers 多个连接
func main() {
ip := "127.0.01"
port := 8848
// 创建监听
address := fmt.Sprintf(`%s:%d`, ip, port)
listener, err := net.Listen(`tcp`, address)
if err != nil {
fmt.Println(`net.listen err :`, err)
return
}
for {
fmt.Println(`监听中`)
conn, err := listener.Accept()
if err != nil {
fmt.Println(`listener.Accept err:`, err)
return
}
fmt.Println(`建立连接成功`)
go handleFunc(conn)
}
}
func handleFunc(conn net.Conn) {
//创建容器 接受读取到到数据
buf := make([]byte, 1024)
cnr, err := conn.Read(buf)
if err != nil {
fmt.Println(`cnr err:`, err)
return
}
fmt.Println(`Client ==> Server,长度`, cnr, "数据:", string(buf[0:cnr]))
//将数据转换成大写
upperData := strings.ToUpper(string(buf))
cnr, err = conn.Write([]byte(upperData))
fmt.Println(`Clinet <====Server,长度`, cnr, "数据:", upperData)
// 关闭
_ = conn.Close()
}
Goland Socket 服务的更多相关文章
- 交通银行 Java Socket 服务启动 管理 WINDOWS 版
按照交通银行提供的无界面启动方法试验了很多次,都没有成功,所以自己动手用C# 知识写了一个. 小工具可以判断 交通银行 JAVA SOCKET 服务是否启动,并可以启动/关闭服务 主要代码如下: 判断 ...
- MeepoPS——轻量级 Socket 服务
MeepoPS是Meepo PHP Socket的缩写.旨在提供高效稳定的由纯PHP开发的多进程SocketService. MeepoPS可以轻松构建在线实时聊天,即时游戏,视频流媒体播放,RPC, ...
- 【原】用PHP搭建基于swoole扩展的socket服务(附PHP扩展的安装步骤及Linux/shell在线手册)
最近公司的一项目中,需要用PHP搭建一个socket服务. 本来PHP是不适合做服务的,因为和第三方合作,需要采用高效而稳定的TCP协议进行数据通信.经过多次尝试,最终选择了开源的PHP扩展:swoo ...
- 在python中编写socket服务端模块(二):使用poll或epoll
在linux上编写socket服务端程序一般可以用select.poll.epoll三种方式,本文主要介绍使用poll和epoll编写socket服务端模块. 使用poll方式的服务器端程序代码: i ...
- Java的socket服务UDP协议
练习1 接收类 package com.socket.demo; import java.io.IOException; import java.net.DatagramPacket; import ...
- NET Socket服务编程
smark https://github.com/IKende/ .NET Socket服务编程之-高效连接接入编 在.NET上编写网络服务深入都有2,3年了,而这些时间时如何在.NET里实现网络服务 ...
- AutoCAD.net支持后台线程-Socket服务端
最近因为公司项目的需求,CAD作为服务端在服务器中常驻运行,等待客户端远程发送执行任务的指令,最终确认用Socket-tcp通讯,CAD需要实时监听客户端发送的消息,这时就需要开启线程执行Socket ...
- GPS服务端(上)-Socket服务端(golang)
从第一次写GPS的服务端到现在,已经过去了八年时光.一直是用.net修修改改,从自己写的socket服务,到suppersocket,都是勉强在坚持着,没有真正的稳定过. 最近一段时间,服务端又出了两 ...
- 基于netty的socket服务端触发了channelInactive方法,但实际连接没有断开的问题
背景: 一个中小型H5游戏,后端使用基于 netty 的socket服务 服务端 分为 分发服务器 & 业务服务器,业务服务器可负载 用户客户端与分发服务器连接 分发服务器再作为客户端与每台业 ...
随机推荐
- python 面向对象理解
简介 与java语言一样,python也属于面向对象编程,除此之外,还有面向过程编程.函数式编程. 面向过程编程:依据业务逻辑自上而下一步一步编写, 可能会存在冗余现象 函数式编程:需要编程语言可以将 ...
- js屏蔽浏览器默认事件
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 模态框➕穿梭框。demo (jq项目)
1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset=" ...
- 二手车价格预测 | 构建AI模型并部署Web应用 ⛵
作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 机器学习实战系列:https://www.showmeai.tech/t ...
- NC20471 [ZJOI2007]棋盘制作
题目链接 题目 题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名. 据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对 ...
- Luogu2574 XOR的艺术 (分块)
本是要练线段树的,却手贱打了个分块 //#include <iostream> #include <cstdio> #include <cstring> #incl ...
- MySQL启动报:[ERROR] The server quit without updating PID file
修改配置后MySQL启动不了,报错: [root@localhost mysql]# service mysql restart Starting MySQL...[ERROR] The server ...
- java学习第三天常用类.day12
String String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了 如果需要对字符串做很多修改,那么应该选择使用 StringBuffer & String ...
- Excel 名称管理器是什么,并实现一个级联选择框
名称 在 Excel 中,每一个单元格都有自己的名称.表格横向是字母,纵向是数字,组合起来就是一个单元格的名称. A13 所代表的是 A 列,13 行的单元格.把一组单元格组合起来,加上一个名称,在 ...
- 介绍下Java内存区域(运行时数据区)
介绍下Java内存区域(运行时数据区) Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域.JDK 1.8 和之前的版本略有不同. 下图是 JDK 1.8 对JV ...