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 ...
随机推荐
- SpringBoot整合RabbitMQ-5.7-课堂笔记-02
- SpringCloudAlibaba 微服务讲解(二)微服务环境搭建
微服务环境搭建 我们这次是使用的电商项目的商品.订单.用户为案例进行讲解 2.1 案例准备 2.1.1 技术选型 maven :3.3.9 数据库:mysql 持久层:SpringData JPA S ...
- 浅析 c++ bitset 的用法
浅析 c++ bitset 的用法 总述 C++的 \(bitset\) 位于 <bitset> 头文件中,这是一种类似于数组的数据结构,每个位置存储 \(0\ or\ 1\) ,并且每个 ...
- Redis Cluster 集群搭建与扩容、缩容
说明:仍然是伪集群,所有的Redis节点,都在一个服务器上,采用不同配置文件,不同端口的形式实现 前提:已经安装好了Redis,本文的redis的版本是redis-6.2.3 Redis的下载.安装参 ...
- Java9至17的新特性总结
总览 讲讲Java 9-17 的一些语法糖和一些新发布的jeps, 重点讲讲JVM的垃圾回收器 时间线 SpringBoot 为什么选择Java17这个版本.我估计跟下面这个图有关系. Java 8 ...
- 【freertos】005-启动调度器分析
前言 本节主要讲解启动调度器. 这些都是与硬件相关,所以会分两条线走:posix和cortex m3. 原文:李柱明博客:https://www.cnblogs.com/lizhuming/p/160 ...
- 解决Idea.exe无法启动问题(idea2017.3版本)
问题: 最近在用idea时,突然弹出了以下消息框(图片不是我的): 将Xmx的值调大以后,idea还是闪退了.并且再点击idea.exe时,idea已经木有反映了,无法启动. 解决方案: 方案一(失败 ...
- DWR是什么?有什么作用?
DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站. 它可以允许在浏览器里的代码使用运行 ...
- Linux 网卡配置参数
网卡配置文件位于 /etc/sysconfig/network-scripts/ 目录下 网卡配置文件在RHEL5/6以eth为网卡文件的前缀,在RHEL7中以ifcfg为网卡文件的前缀 配置 解释 ...
- Effective Java —— 用静态工厂方法代替构造器
本文参考 本篇文章参考自<Effective Java>第三版第一条"Consider static factory methods instead of constructor ...