Go语言中Socket通信之Tcp客户端
1、用法:
(1)定义远程IP地址。使用net.ResolveTCPAddr()方法,定义一个TCP地址,做为目标连接地址。
(2)调用net.DialTCP("tcp",nil,remoteAddress) 方法,建立与remoteAddress的连接。这里的三参数分别是:协议名、本地IP、远程IP
(3)可以学着调用连接对像中的一些常用方法。用于学习。
(4)试着写入一些消息。比如模拟发送请求响应头的内容。使用:conn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n"))
(5)接收内容:使用ioutil包下的 ReadAll方法。直接接收加[]byte,然后转为字符串输入即可。
2、代码:
package main import (
"fmt"
"io/ioutil"
"net"
) func main() {
var remoteAddress, _ = net.ResolveTCPAddr("tcp4", "www.baidu.com:80") //生成一个net.TcpAddr对像。
var conn, err = net.DialTCP("tcp4", nil, remoteAddress) //传入协议,本机地址(传了nil),远程地址,获取连接。
if err != nil { //如果连接失败。则返回。
fmt.Println("连接出错:", err)
return
}
var remoteIpAddress = conn.RemoteAddr() //获取IP地址的方法。
fmt.Println("远程IP地址是:", remoteIpAddress) //输出:220.181.111.188:80
var localIPAddress = conn.LocalAddr()
fmt.Println("本地IP地址是:", localIPAddress) //输出:192.168.1.9:45712 conn.Write([]byte("HEAD / HTTP/1.0\r\n\r\n")) //尝试发送些信息。
//var reciverBuffer []byte //定义一个空切片,用于接收结果。
//len, err := conn.Read(reciverBuffer) //返回接收到的字节数。
bys, err := ioutil.ReadAll(conn) //接收消息。
if err != nil {
fmt.Println("接收出错:", err)
}
//var reciveText = string(reciverBuffer[0:len])
var reciveText = string(bys)
fmt.Println(reciveText)
conn.Close() //关闭连接
fmt.Println("程序结束")
}
3、运行效果:
远程IP地址是: 220.181.111.188:80
本地IP地址是: 192.168.1.9:45857
HTTP/1.1 200 OK
Date: Tue, 08 Mar 2016 13:37:12 GMT
Content-Type: text/html
Content-Length: 14613
Last-Modified: Wed, 03 Sep 2014 02:48:32 GMT
Connection: Close
Vary: Accept-Encoding
Set-Cookie: BAIDUID=E966C0AF917C9D123196E010EBB541E2:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=E966C0AF917C9D123196E010EBB541E2; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1457444232; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Server: BWS/1.1
X-UA-Compatible: IE=Edge,chrome=1
Pragma: no-cache
Cache-control: no-cache
BDPAGETYPE: 1
BDQID: 0xc58fe0370008a163
BDUSERID: 0
Accept-Ranges: bytes 程序结束
成功: 进程退出代码 0.
Go语言中Socket通信之Tcp客户端的更多相关文章
- Go语言中Socket通信TCP服务端
1.用法: (1)定义远程IP地址.使用net.ResolveTCPAddr()方法,定义一个TCP地址,做为本机监听地址. (2)使用net.ListenTCP("tcp",lo ...
- 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)
原文:使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置) 在上一篇中说到了Silverlight下的Socket通信,在最后的时候说到本篇将会结合地图. ...
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...
- Android中Socket通信之TCP与UDP传输原理
一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时 ...
- Socket通信——服务器和客户端相互通信
所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. Socket和S ...
- JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo
OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七 ...
- [转]vb socket通信(TCP/UDP)一对一、多对一
VB Socket编程(Winsock控件创建TCP/IP客户机/服务器程序) Winsock控件建立在TCP.UDP协议的基础上,完成与远程计算机的通信.即使对TCP/IP不太熟悉的用户,使用 ...
- c++ 网络编程(二) linux 下多进程socket通信 多个客户端与单个服务端交互代码实现回声服务器
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9612820.html 锲子-- 预备知识优雅的关闭套接字连接: 基于TCP的半关闭 TCP中的 ...
- 使用 Socket 通信实现 FTP 客户端程序(来自IBM)
FTP 客户端如 FlashFXP,File Zilla 被广泛应用,原理上都是用底层的 Socket 来实现.FTP 客户端与服务器端进行数据交换必须建立两个套接字,一个作为命令通道,一个作为数据通 ...
随机推荐
- Spring4+quartz2集群借助邮箱或是短信实现生日的农历提醒(Quartz实现农历、阴历、公历生日提醒)
自己记性差,除了老婆.老大和自己的生日以外,一直记不住亲朋好友的生日,长辈们的生日基本上又都是用农历来算,公历的话,直接用Quartz设置循环提醒,农历就没辙了,每每搞的自己很尴尬,需要别人来提醒自己 ...
- 浴血黑帮第一季/全集Peaky Blinders迅雷下载
本季第一季Peaky Blinders Season 1 (2013)看点:<浴血黑帮>Peaky Blinders是从战后伯明翰地区走出的一个传奇黑帮家族,时间要追溯到1919年,家族成 ...
- ios之快速领会VFL的demo
在网上看到一篇blog,超正!快速领会ios的vfl. 这里贴上blog的地址. http://www.thinkandbuild.it/learn-to-love-auto-layout-prog ...
- CTO、CIO
对于不从事技术研发的企业,完全不必要设立CTO这一职位,但是CIO是要始终存在为企业提供更好的咨询服务.有时CT0和CIO是同一个人,毕竟是信息时代嘛!CIO的角色从过去IT时代的交付型,转变为DT时 ...
- cannot import name 'main' 解决方案
error description: pip3 install numpy Traceback (most recent call last): File "/usr/bin/pip3&qu ...
- 使用idea 在springboot添加本地jar包的方法
原文地址;https://blog.csdn.net/huxiaodong1994/article/details/80702278 1.首先在与src同级的目录下新建一个lib目录,然后将本地jar ...
- B样条
在数学的子学科数值分析里,B-样条是样条曲线一种特殊的表示形式.它是B-样条基曲线的线性组合.B-样条是贝兹(贝塞尔)曲线的一种一般化,可以进一步推广为非均匀有理B样条(NURBS),使得我们能给更多 ...
- Android 第三方加固方案 对比 MD
常见的第三方加固方案官网介绍 由于安卓APP是基于Java的,所以极容易被破解,一个不经过加固的APP犹如裸奔一样,毫无防备.之前曾有新闻报道,一些专职的APP打包黑产就是专门从各种渠道找到apk,通 ...
- https://www.cnblogs.com/xubing-613/p/5895948.html
最近总是需要用matplotlib绘制一些图,由于是新手,所以总是需要去翻书来找怎么用,即使刚用过的,也总是忘.所以,想写一个入门的教程,一方面帮助我自己熟悉这些函数,另一方面有比我还小白的新手可以借 ...
- 大数据开发实战:Hive优化实战3-大表join大表优化
5.大表join大表优化 如果Hive优化实战2中mapjoin中小表dim_seller很大呢?比如超过了1GB大小?这种就是大表join大表的问题.首先引入一个具体的问题场景,然后基于此介绍各自优 ...