[转] golang socket
server.go
package main import (
"net"
"fmt"
"io/ioutil"
"time"
) func main(){
tcpServer, _ := net.ResolveTCPAddr("tcp4", ":8080")
listener, _ := net.ListenTCP("tcp", tcpServer) for {
conn, err := listener.Accept()
if err != nil {
fmt.Println(err)
continue
}
// handle
go handle(conn)
}
} func handle(conn net.Conn){
defer conn.Close() //read msg from client
go func(){
response, _ := ioutil.ReadAll(conn)
fmt.Println(response)
}() // send msg to client
time.Sleep(1 * time.Second)
now := time.Now().String()
conn.Write([]byte(now))
}
client.go
package main import (
"os"
"fmt"
"net"
"io/ioutil"
) func main() {
if len(os.Args) < 2 {
fmt.Fprintf(os.Stderr, "Usage: %s host:port", os.Args[0])
}
// get socket addr from ags
server := os.Args[1]
addr, err := net.ResolveTCPAddr("tcp4", server)
checkError(err) // establish conn
conn, err := net.DialTCP("tcp4", nil, addr)
checkError(err) // send msg to server
_, err = conn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n"))
checkError(err) //get response
response, _ := ioutil.ReadAll(conn)
fmt.Println(string(response))
os.Exit(0)
} func checkError(err error){
if err != nil{
fmt.Println(err)
os.Exit(1)
}
}
原文:https://studygolang.com/articles/11796
[转] golang socket的更多相关文章
- golang socket 分析
socket:tcp/udp.ip构成了网络通信的基石,tcp/ip是面向连接的通信协议 要求建立连接时进行3次握手确保连接已被建立,关闭连接时需要4次通信来保证客户端和,服务端都已经关闭 在通信过程 ...
- Golang socket
1.本例子实现了一个简单的TCP echo.客户端发送Hello,服务端回应World. 参考:<Socket编程> 2.服务端代码 package main import ( " ...
- golang socket 实现分析(一)
socket:tcp/udp.ip构成了网络通信的基石,tcp/ip是面向连接的通信协议 要求建立连接时进行3次握手确保连接已被建立,关闭连接时需要4次通信来保证客户端和,服务端都已经关闭 在通信过程 ...
- golang socket与Linux socket比较分析
在posix标准推出后,socket在各大主流OS平台上都得到了很好的支持.而Golang是自带runtime的跨平台编程语言,Go中提供给开发者的socket API是建立在操作系统原生socket ...
- Linux下Golang Socket编程原理分析与代码实现
在POSIX标准推出后,socket在各大主流OS平台上都得到了很好的支持.而Golang是自带Runtime的跨平台编程语言,Go中提供给开发者的Socket API是建立在操作系统原生Socket ...
- Golang Socket编程
Socket编程 在很多底层网络应用开发者的眼里一切编程都是Socket,话虽然有点夸张,但却也几乎如此了,现在的网络编程几乎都是用Socket来编程.你想过这些情景么?我们每天打开浏览器浏览网页时, ...
- golang socket编程 net.Conn IO.EOF解读
结论 首先,先定义下我的理解,当在Read时,收到一个IO.EOF,代表的就是对端已经关闭了发送的通道,通常来说是发起了FIN. 那么根据自己的实际业务,就可以进行判断,这里的IO.EOF到底该怎么利 ...
- Golang websocket
环境:Win10 + Go1.9.2 1.先下载并引用golang的websocket库 ①golang的官方库都在https://github.com/golang下,而websocket库在/ne ...
- Golang开发支持平滑升级(优雅重启)的HTTP服务
Golang开发支持平滑升级(优雅重启)的HTTP服务 - tabalt的博客 http://tabalt.net/blog/graceful-http-server-for-golang/ http ...
随机推荐
- appium工具 录制的方法
参考: https://www.jianshu.com/p/5eef1bfa42ae
- 自定义 MultiColumnComboBox[转]
// taken from a control written by Nishant Sivakumar. // http://www.codeproject.com/cs/combobox/DotN ...
- mysql 5.6 binlog组提交实现原理(转载)
http://blog.itpub.net/15480802/viewspace-1411356/ Redo组提交 Redo提交流程大致如下 lock log->mutex write redo ...
- 基于线程池的多并发Socket程序的实现
Socket“服务器-客户端”模型的多线程并发实现效果的大体思路是:首先,在Server端建立“链接循环”,每一个链接都开启一个“线程”,使得每一个Client端都能通过已经建立好的线程来同时与Ser ...
- Vue.js系列之项目结构说明
转:https://www.jb51.net/article/111658.htm 前言 在上一篇项目搭建文章中,我们已经下载安装了node环境以及vue-cli,并且已经成功构建了一个vue-cli ...
- c#语言---数据类型
整型 值类型 名称 CTS类型 说明 ...
- Spark2.X环境准备、编译部署及运行
下载地址 :https://www.apache.org/dyn/closer.lua/spark/spark-2.2.0/spark-2.2.0.tgz 我们把spark放在节点2上 解压 下面我们 ...
- Android 6.0动态申请权限时,权限框闪一下就消失的问题;
Android 蓝牙BLE开发需要位置权限,不然扫描不到周围的蓝牙信息: 位置权限申请: if (Build.VERSION.SDK_INT < 23){return;} //判断是否有权限 i ...
- Solr——Windows下部署Solr7.5.0至jetty、Tomcat
Solr6用默认的Jetty启动 需要的软件支持 JDK1.8以上 Solr6的安装包(solr-7.5.0.zip ) Solr自带一个Jetty环境,可以很方便的运行Solr. 直接到解压缩的so ...
- 错误为Lc.exe已退出,代码为-1
近来在做项目的时候,突然遇到 了 LC.exe 已退出,代码为-1 的提示,怎么也编译不了,在查了相关的资料后,终于明白了原因,其解决方案如下 : 1. 以管理员的身份来运行vs, 并把项目中“pro ...