1.c/s架构的软件是基于网络进行通信的 2.网络的核心即一堆协议,协议即标准,你想开发一款基于网络的通信的软件,就必须遵循这些标准 3.什么是socket socket是应用层与tcp/ip协议通信的中间软件,它就是一组接口。 它把复杂的TCP/IP协议族隐藏在socket接口后面,对于用户来说,一组简单的接口就是全部 我们只需要遵循socket的规定去编程,写出的程序子让就是遵循TCP/UDP标准的 socket=ip+portip是用来标识互联网中的一台主机的位置 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() 关闭套接字
