go网络编程-tcp客户端
socket编程 Dial函数 net.Dial()
func Dial(network,addresss string) (Conn, error){
var d Dialer
return d.Dial(network,address)
}
//tcp连接
conn,err := net.Dial("tcp","192.168.1.1:8080")
udp 连接
conn ,err := net.Dial("upd","192.168.1.1:8888")
icmp连接
conn , err := net.Dial(“ipv4:icmp”,"www.baidu.com")
conn .err := net.Dial("ipv4:1","www.baidu.com")
tcp例子
package main
import (
"bytes"
"fmt"
"io"
"net"
"os"
)
func main(){
if len(os.Args) != 2 {
fmt.Fprintf(os.Stderr,"usage:%s host port:",os.Args[0])
}//
service := os.Args[1]
conn,err := net.Dial("tcp",service)
checkError(err)
_,err := conn.Write([]byte("head / http/1.0 \r\n\r\n"))
checkError(err)
result,err := readFully(conn)
}
func checkError(err error){
if err != nil {
fmt.Fprintf(os.Stderr,"fatal errors:%s",err.error())
os.Exit(1)
}
}
func readFully(conn net.Conn)([]byte,error){
defer conn.Close()
result := bytes.NewBuffer(nil)
var buf [512]bytes
}
//就是建立连接、发送数据、接收数据
网络超时处理
1连接超时
net.DialTimeout 主动传入额外的超时参数来建立连接
conn,err := net.DialTimeout("tcp",service,3*time.Second )
2请求和响应超时
err = setDeadline(time.Now().Add(5*time.Second))
setReadDeadline()
setWriteDeadline()
net包提供的
net.ParseIP()
IPv4Mask(a,b,c,d byte)
http编程 get post方式发起http请求
http.Client()
http.Get
resp, err := http.Get("https://www.baidu.com")
if err != nil {
return
}
defer resp.Body.Close()
io.Copy(os.Stdout ,resp.Body)
resp.Body
获取响应实体,通过 resp.Header
获取响应头,通过 resp.StatusCode
获取响应状态码
http.Post
//参数1 请求的url 参数2 请求数据的资源类型 mineType 参数3 数据的比特流 []byte
resp,err := http.Post("https:www.baidu.com","image/jpeg",&imageDataBuf)
if resp.StatusCode != http.StatsOk {
}
http.PostForm application/x-www-form-urlencoded 的post 表单请求
resp,err := http.PostForm("https://www.baidu.com",url.Values{"name":{"fly"}}) ///url.Values 进行编码和封装
http.Head 只请求目标url的响应头信息 不返回响应实体
resp , err := http.Head("https://www.baidu.com")
defer resp.Body.Close()
for key,value := range resp.Header {
fmt.Println(key,value)
}
(*http.Client).Do
http.NewRequest()
req, err := NewRequest("GET","htttps://www.baidu.com",nil)
if err != nil {
fmt.Printf()
}
req.Header.Add("key","value")
client := &http.Client{
}
resp,err := client.Do(req)
http https请求处理
开启一个http服务
func ListenAndServer(addr string,handler handler) error
package main
func main(){
http.HandleFunc("/hello",func(writer http.ResponseWriter,rquest *http.Request){
params := request.URL.Query();
params.Get("name")
})
err := http.ListenAndServe(":80800",nil)
客户端请求
req,err := http.NewRequest("GET","http:/hello?name=fly",nil)
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现