Golang——socket
时间:2022-06-22
本文章向大家介绍Golang——socket,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
socket
客户端代码
package main
import (
"bufio"
"fmt"
"io"
"net"
"time"
)
func main() {
var tcpAddr *net.TCPAddr
tcpAddr,_ = net.ResolveTCPAddr("tcp","127.0.0.1:9999")
conn,err := net.DialTCP("tcp",nil,tcpAddr)
if err!=nil {
fmt.Println("Client connect error ! " + err.Error())
return
}else {
fmt.Println(conn.LocalAddr().String() + "客户端连接成功!")
}
defer conn.Close()
// 向服务器发送数据
reader := bufio.NewReader(conn)
conn.Write([]byte("hi server n"))
for {
// 接受服务器返回数据
msg, err := reader.ReadString('n')
fmt.Println(msg)
if err != nil || err == io.EOF {
fmt.Println(err)
break
}
time.Sleep(time.Second * 2)
b := []byte(fmt.Sprintf("client time:%sn",time.Now().String()))
_, err = conn.Write(b)
if err != nil {
fmt.Println(err)
break
}
}
}
服务器代码
package main
import (
"bufio"
"fmt"
"io"
"net"
"time"
)
//tcp server
func main() {
//定义一个tcp断点
var tcpAddr *net.TCPAddr
//通过ResolveTCPAddr实例一个具体的tcp断点
tcpAddr,_ = net.ResolveTCPAddr("tcp",":9999")
//打开一个tcp断点监听
tcpListener,err:= net.ListenTCP("tcp",tcpAddr)
if err !=nil{
panic(err)
}
defer tcpListener.Close()
fmt.Println("server start success")
//循环接收客户端的连接,创建一个协程具体去处理连接
for{
tcpConn,err := tcpListener.AcceptTCP()
if err!=nil {
fmt.Println(err)
continue
}
fmt.Println(tcpConn.RemoteAddr().String()+"connect success")
go tcpPipe(tcpConn)
}
}
//具体处理连接过程方法
func tcpPipe(conn *net.TCPConn){
//tcp连接的地址
ipStr := conn.RemoteAddr().String()
defer func() {
fmt.Println(" Disconnected : " + ipStr)
conn.Close()
}()
//获取一个连接的reader读取流
reader := bufio.NewReader(conn)
for {
message,_,err := reader.ReadLine()
if err!=nil || err == io.EOF {
break
}
fmt.Println(string(message))
time.Sleep(time.Second*3)
b := []byte(fmt.Sprintf("server time:%sn",time.Now().String()))
conn.Write(b)
}
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 1.opengl绘制三角形
- dubbo本地直连调试注意点
- Tomcat的使用及服务器的一些基础知识
- fastJson 之JSONObject.toJavaObject()方法不能解析嵌套自定义list对象
- 文件包含漏洞学习总结(结尾有实例)
- 树莓派基础实验17:温度传感器实验
- Java Servlet详解(体系结构+注解配置+生命周期)
- RabbitMq如何确保消息不丢失
- 《sql必知必会》——读书笔记(4)
- AkShare-债券数据-国债期货可交割券相关指标
- Linux From Scratch
- 介绍一款 API 敏捷开发工具
- java线程池(五):ForkJoinPool源码分析之一(外部提交及worker执行过程)
- JavaScript中的匿名函数、闭包和BOM
- 【Vue.js】Vue.js中的事件处理、过滤器、过渡和动画、组件的生命周期及组件之间的通信