时间:2020-7-11来源:本站原创作者:佚名
传统的Socket编程

在Go语言中进行网络编程时,比传统的网络编程实现更加简洁。

回想下我们在C语言中编写网络程序时,以基于TCP协议的网络服务为例,客户端和服务端的实现流程通常是这样的:

从服务端来看,代码编写分为以下几个步骤:

建立并绑定Socket:首先服务端使用socket()函数建立网络套接字,然后使用bind()函数为套接字绑定指定的IP和端口;

监听请求:接下来,服务端使用listen()函数监听客户端对绑定IP和端口的请求;

接收连接:如果有请求过来,并通过三次握手成功建立连接,则使用accept()函数接收并处理该连接;

处理请求与发送响应:服务端通过read()函数从上述已建立连接读取客户端发送的请求数据,经过处理后再通过write()函数将响应数据发送给客户端

从客户端来看,代码编写分为以下几个步骤:

建立Socket:客户端同样使用socket()函数建立网络套接字;

建立连接:建立连接:然后调用connect()函数传入IP和端口号建立与指定服务端网络程序的连接;

发送请求与接收响应:连接建立成功后,客户端就可以通过write()函数向服务端发送数据,并使用read()函数从服务端接收响应。

基于UDP协议的网络服务大致流程也是一样的,只是服务端和客户端之间不需要建立连接。

Go语言标准库对这个过程进行了抽象和封装,无论我们使用什么协议建立什么形式的连接,都只需要调用net.Dial()函数就可以了,从而大大简化了代码的编写量,下面我们就来看看该函数的用法。

Dial()函数

Dial()函数的原型如下:

funcDial(network,addressstring)(Conn,error){vardDialerreturnd.Dial(network,address)}

其中network参数表示传入的网络协议(比如tcp、udp等),address参数表示传入的IP地址或域名,而端口号是可选的,如果需要指定的话,以「:」的形式跟在地址或域名的后面就好了。如果连接成功,该函数返回连接对象,否则返回error。

我们来看一下几种常见协议的调用方式。

1、TCP连接:

conn,err:=net.Dial("tcp","..10.10:80")

2、UDP连接:

conn,err:=net.Dial("udp","..10.10:")

3、ICMP连接(使用协议名称):

conn,err:=net.Dial("ip4:icmp","
转载请注明原文网址:http://www.gzdatangtv.com/bbqb/12940.html

------分隔线----------------------------