1.c/s架构的软件是基于网络进行通信的
2.网络的核心即一堆协议,协议即标准,你想开发一款基于网络的通信的软件,就必须遵循这些标准
3.什么是socket
socket是应用层与tcp/ip协议通信的中间软件,它就是一组接口。
它把复杂的TCP/IP协议族隐藏在socket接口后面,对于用户来说,一组简单的接口就是全部
我们只需要遵循socket的规定去编程,写出的程序子让就是遵循TCP/UDP标准的
socket=ip+port
ip是用来标识互联网中的一台主机的位置
port是用来标识这台机器上的一个应用程序
ip地址是配置到网卡,port是应用程序开启的
ip加por的t绑定标识互联网中独一无二的一个应用程序
pid标识一台机器上不同进程
4.套接字
套接字:一台主机上的多个应用程序之间的通讯。
套接字分为两种:
1.基于文件类型的套接字 AF_UNIX
unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,
两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信
2.基于网络类型的套接字 AF_INET
socket启动流程套路:
服务器先初始化socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接
客户端初始化一个socket,然后连接服务器(connect),如果连接成功,这时客户端有服务器端的连接就建立了。
客户端发送数据请求,服务器端接受请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束
服务端套接字函数
s.bind() 绑定(主机,端口)到套接字
s.listen() 开始TCP监听
s.accept()被动接受tcp客户端的连接,(阻塞式)等待连接的到来
服务端套接字函数
s.connect () 主动初始化tcp服务器连接
s.connect_ex() connect()函数的扩展版本,出错时返回错误代码,而不是抛出异常
公共用途的套接字函数
s.recv() 接受数据
s.send() 发送tcp数据
s.sendall() 发送完整的tcp数据
s.recvfrom 接受UDP数据
s.sento() 发送UDP数据
s.getpeername() 连接到当前套接字的远端的地址
s.getsockname() 当前套接字的地址
s.getsockopt() 返回指定套接字的参数
s.setsockopt() 设置指定套接字的参数
s.close() 关闭套接字