Go主要的目标之一就是面向大规模后端服务程序,网络通信这块是服务端程序必不可少也是至关键的一部分。

网络编程有两种:

(1)TCP Socket编程:是网络编程的主流,之所以叫TCP Socket编程,是因为底层是基于TCP/IP协议的;

(2)B/S结构的http编程,使用浏览器去访问服务器时,使用的就是http协议,而http底层就是tcp socket实现的;

计算机间需要通讯,必须要有网线、网卡或者是无线网卡;

TCP/IP模型:应用层、传输层、网络层、数据链路层、物理层;

IP地址:每个internet上的主机和路由器都有一个ip地址,它包括网络号和主机号,ip地址有ipv4(32位)或ipv6(128位),可以通过Ipconfig查看。

端口:逻辑意义上 的端口,特指tcp/ip协议中的端口。共256×256-1=65535个端口;

端口分类:

  • 0是保留端口;
  • 1-1024是固定端口(22:ssh远程登录协议,23:telnet使用,21:ftp使用,25:smtp服务使用,80:lis使用,7:echo服务)
  • 1025-65535:是动态端口,供程序员使用;

服务端和客户端之间通信框图:

可以看出,它们之间的通信是通过端口 (由于是简易的通讯,目前客户端并不能直接交流,只能通过客户端)

server.go

client.go

首先在一个终端打开服务器:

然后连接两个客户端:

注意到,每个客户端的端口号是不一致的:

然后两个客户端分别发送消息给服务端:

服务端可以接收到信息:

最后输入exit分别关闭两个客户端:

两个客户端都退出了,然后服务端继续等待新的客户端的连接。