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 客户端与服务器端进行数据交换必须建立两个套接字,一个作为命令通道,一个作为数据通 ...
随机推荐
- 玩转Eclipse — 自动代码生成的Java Code Template
文章转载地址:点击打开链接 当代码写到一定程度之后,就会发现很多代码都被重复地敲了N多遍,甚至毫不夸张地说:闭着眼睛都能敲出来.大量地敲这些重复地代码,除了锻炼敲键盘的速度,基本上没有其他益处,但是长 ...
- JAVA Iterator 转成 List
List转到Iterator容易,JDK本身就支持,反过来的实现方式如下:1.使用Apache Common Collections 2.自己实现的方法转换3.Guaa实现转换 方式1: #Apach ...
- 《SEO教程:搜索引擎优化入门与进阶(第3版)》
<SEO教程:搜索引擎优化入门与进阶(第3版)> 基本信息 作者: 吴泽欣 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115357014 上架时间:2014-7-1 出 ...
- centos7更改为启动桌面或命令行模式
进入cenos7的命令行模式 终端输入“init 3”回车进入命令行模式 登录成功后 # systemctl get-default //获取当前系统启动模式 查看配置文件 # cat /etc/in ...
- FrameLayout框架布局的的动态配置
导包省略…… acticity.java public class MainActivity extends Activity { @Override protected void onCreate( ...
- ConcurrentHashMap和HashMap的区别
(1)ConcurrentHashMap对整个桶数组进行了分段,而HashMap则没有 (2)ConcurrentHashMap在每一个分段上都用锁进行保护,从而让锁的粒度更精细一些,并发性能更好,而 ...
- Java NIO Channel to Channel Transfers
In Java NIO you can transfer data directly from one channel to another, if one of the channels is a ...
- libcurl库的http get和http post使用【转】
一.libcurl中的http get使用方法 1. 为什么要使用libcurl 1) 作为http的客户端,可以直接用socket连接服务器,然后对到的数据进行http解析,但要分析协议头,实现代理 ...
- 使用矩阵分解(SVD)实现推荐系统
http://ling0322.info/2013/05/07/recommander-system.html 这个学期Web智能与社会计算的大作业就是完成一个推荐系统参加百度电影推荐算法大赛,成绩按 ...
- Jquery中的高度
$('.someElement').height(); // returns the calculated pixel height of the element(s) $(window).heigh ...