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 客户端与服务器端进行数据交换必须建立两个套接字,一个作为命令通道,一个作为数据通 ...
随机推荐
- 【gitlab】首次提交本次代码到gitlab上,报错:Updates were rejected because the remote contains work that you do
首次提交本次代码到gitlab上,报错:Updates were rejected because the remote contains work that you do 报错情况如下: 错误原因: ...
- 走进DOM:HTML DOM
DOM(Document Object Model)即文档对象模型.针对HTML和XML 文档的API(应用程序接口). DOM描绘了一个层次化的节点树,执行开发者加入.移除和改动页面的某一部分.当然 ...
- EntityFramework:状态变化与方法的关系(朋友的学习笔记)
一.约定OnModelCreating 有一些限制需要注意,例如: 1.表名不支持使用标签进行标注 2.最小长度在 OnModelCreating 中不支持 3.正则表达式在 OnModelCreat ...
- log4j1修改DailyRollingFileAppender支持日志最大数量
配置说明: log4j.appender.logfile=org.apache.log4j.MyDailyRollingFileAppender log4j.appender.logfile.File ...
- ScrollView滚动条的各种设置
ScrollView滚动条不显示:android:scrollbars="none"ScrollView滚动条恒显示:android:fadeScrollbars="fa ...
- 如何用 Java 实现 Web 应用中的定时任务?
定时任务,是指定一个未来的时间范围执行一定任务的功能.在当前WEB应用中,多数应用都具备任务调度功能,针对不同的语音,不同的操作系统, 都有其自己的语法及解决方案,windows操作系统把它叫做任务计 ...
- go语言之进阶篇定时器重置
1.定时器重置 示例: package main import ( "fmt" "time" ) func main() { timer := time.New ...
- go语言之进阶篇Read的使用
1.read的使用(备注:读文件) 示例: package main import ( "fmt" "io" "os" ) func Wri ...
- Python科学计算技巧积累四——双y轴图像绘制
双y轴图像具有单y轴图像没有的对比效果,在MATLAB中有plotyy函数可以实现,Python的实现方式没有MATLAB那样方便,不过实现效果却也不见得差. 以往我常用的绘图命令是import ma ...
- 使用Java开发微信公众平台(二)——消息的接收与响应
上一篇文章(http://www.jerehedu.com/fenxiang/171807_for_detail.htm )中,我们学习了使用Java语言开发微信公众平台的第一部分——环境搭建与开发接 ...