go socket、http网络编程demo
1、socket通信
服务端接收数据
package main import (
"fmt"
"net"
"strings"
) func main() {
//创建监听
ip := "127.0.0.1"
port := 8848
address := fmt.Sprintf("%s:%d",ip,port)
listen, err := net.Listen("tcp", address)
if err != nil {
fmt.Println(err)
return
}
//一直轮询监听
for {
fmt.Println("监听中...")
//接收数据
conn, err := listen.Accept()
if err != nil {
fmt.Println("accept",err)
return
}
fmt.Println("连接成功")
//启动多个处理回调
go handle(conn)
}
} func handle(conn net.Conn) {
for{
//创建一个容器,用于接受读取到的数据
buf := make([]byte,1024)
//cnt真正读取客户端发来的数据长度
fmt.Println("准备读取发送过来的数据")
cnt, err := conn.Read(buf)
if err != nil {
fmt.Println("cnt err",err)
return
}
//只输出收到的长度
fmt.Println("长度:",cnt,"---数据:",string(buf[:cnt]))
//将数据转成大写
upperData := strings.ToUpper(string(buf[:cnt]))
write, err := conn.Write([]byte(upperData))
if err != nil {
fmt.Println("write err",err)
return
}
fmt.Println("长度:",write,"---数据:",upperData)
}
//关闭
conn.Close()
}
socket客户端请求
func main() {
dial, err := net.Dial("tcp", ":8848")
if err != nil {
panic(err)
}
fmt.Println("connect success")
//不断重复发送多次
for {
//发送数据
sendData := []byte("hello world")
write, err := dial.Write(sendData)
if err != nil {
panic(err)
}
fmt.Println("send :",write,"--sendData:",string(sendData))
//接收服务器返回
buf := make([]byte,1024)
read, err := dial.Read(buf)
if err != nil {
panic(err)
}
time.Sleep(time.Second)
fmt.Println("client receive,",read,"--receive data:",string(buf[:read]))
}
defer dial.Close()
}
2、http服务请求
服务端
func main() {
//注册路由
http.HandleFunc("/user", func(writer http.ResponseWriter, request *http.Request) {
//write 将数据返回给客户端
//request 请求数据
fmt.Println("method:",request.Method,request)
io.WriteString(writer,"这是返回的数据")
})
if err := http.ListenAndServe("127.0.0.1:8080",nil); err != nil {
panic(err)
}
}
客户端请求
func main() {
//http包
client := http.Client{}
rsp, err := client.Get("http://127.0.0.1:8080")
if err != nil {
panic(err)
}
fmt.Println(rsp,rsp.Body,rsp.Header.Get("Content-Type"))
}
go socket、http网络编程demo的更多相关文章
- 浅谈JAVA中如何利用socket进行网络编程(二)
转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...
- 浅谈JAVA中如何利用socket进行网络编程(一)
转自:http://developer.51cto.com/art/201106/268385.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...
- Linux 系统编程 学习:06-基于socket的网络编程1:有关概念
Linux 系统编程 学习:006-基于socket的网络编程1:有关概念 背景 上一讲 进程间通信:System V IPC(2)中,我们介绍了System IPC中关于信号量的概念,以及如何使用. ...
- Linux 系统编程 学习:07-基于socket的网络编程2:基于 UDP 的通信
Linux 系统编程 学习:07-基于socket的网络编程2:基于 UDP 的通信 背景 上一讲我们介绍了网络编程的一些概念.socket的网络编程的有关概念 这一讲我们来看UDP 通信. 知识 U ...
- Python Socket,How to Create Socket Server? - 网络编程实例
文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...
- Python Socket,How to Create Socket Cilent? - 网络编程实例
文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...
- Socket 的网络编程
socket 网络编程的服务端: 1) 创建socket 套接字. 2) 和socket绑定主机地址和端口 3) socket 主动监听端口,看又没有来连接. 4) 当执行到 accept() 时, ...
- Java NIO网络编程demo
使用Java NIO进行网络编程,看下服务端的例子 import java.io.IOException; import java.net.InetAddress; import java.net.I ...
- 网络编程demo之Udp和URL
首先是udp编程客户端发送消息给服务端,服务端接受然后打印到console控制台上 下面是一个有代表性的demo package com.henu.liulei; import java.io.IOE ...
随机推荐
- Spring 中的 bean线程安全性分析
首先:Spring 中的 bean不是线程安全的 Spring容器中的Bean是否线程安全,容器本身并没有提供Bean的线程安全策略,因此可以说Spring容器中的Bean本身不具备线程安全的特性,但 ...
- virtualenv和virtualenvwrapper pipenv安装
virtualenv和virtualenvwrapper pipenv安装 virtualenvwrapper工具 virtualenvwrapper是用来管理virtualenv的扩展包,用着很方便 ...
- SQL注入工具sqlmap的使用
sqlmap使用 测试注入点 sqlmap -u "URL" 爆数据库 sqlmap -u "URL" --dbs 查看当前库 sqlmap -u " ...
- 为什么你需要在用 Vue 渲染列表数据时指定 key
本文改写整理自一篇博文,原文链接如下: Why you should use the key directive in Vue.js with v-for Application state and ...
- Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?
配置变更JDK 版本升级第三方类库升级响应式 Spring 编程支持HTTP/2 支持配置属性绑定更多改进与加强-
- MariaDB CTE公用表达式
公用表达式(Common Table Expressions,简称CTE) Maria DB 版本为10.2.2以上的才支持 WITH 语法 CTE 介绍 WITH关键字表示公用表表达式(CTE) 它 ...
- 1.时任务XXL_Job框架踩过的坑
遇到的问题 问题1:执行器地址为空 原因-->执行器中 没有地址 解决方案-->输入地址:http://IP地址:端口 IP地址 端口 问题2:异常信息unknown code for r ...
- 谈谈关于CSS中transform属性之scale
谈谈关于scale属性 scale是什么? 根据W3C定义 ,scale主要是进行缩放和转化: scale能做什么? 1.1px细线 <div class="wrap"> ...
- [译] Facebook:我们是如何构建第一个跨平台的 React Native APP
英文原文(需FQ):https://code.facebook.com/posts/1189117404435352/ 早些时候,我们介绍过iOS版的React Native. React Nativ ...
- 基于腾讯开源的msec来进行php开发模块
msecphp 毫秒服务引擎(Mass Service Engine in Cluster)是一个开源框架,适用于在廉价机器组成的集群上开发和运营分布式后台服务. 毫秒服务引擎集RPC.名字发现服务. ...