之前我们系统地描述了五子棋的人机对战,了解了五子棋的基本操作,例如电脑的应手算法,输赢判断等等。那如何实现五子棋的网络对战,即人人对战呢?这里就用到了套接字socket编程,听上去很高级,其实无论哪种编程语言,实现起来的方法(套路)都是大同小异的。
一、
python的套接字socket编程基本概念及操作,对基本原理的理解是学习编程的基础。
1.1 服务端就是一系列硬件或软件,为一个或多个客户端(服务端服务的用户)提供所需的“服务”。它存在唯一目的就是等待客户端的请求(经常称之为“监听”),并响应客户端,为客户端提供服务),然后等待更多请求,周而复始。
1.2 套接字是计算机网络数据结构,在任何类型的通信开始之前,网络应用程序必须创建套接字。socket原意就是插座,插口,插孔的意思,所以可以将它们比作网络插孔,没有它将无法进行通信。Python只支持AF_UNIX、AF_NETLINK、AF_TIPC 和 AF_INET ,尤其是使用基于网络的AF_INET.
套接字三要素:IP,端口,协议。python使用元组保存:ADDR = (IP,端口)。协议:
流式套接字(SOCK_STREAM):用于提供面向连接、可靠的数据传输服务。TCP
数据报套接字(SOCK_DGRAM):提供了一种无连接的服务。这个并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。UDP
1.3 python常用对象方法和属性
服务器套接字方法
bind(ADDR) 将地址(主机名、端口号对)绑定到自接字上
listen([backlog]) 设置并启动TCP监听器,如果指定backlog,则必须至少为0(如果低于0,则设置为0);
accept() 被动接受TCP客户端连接,一直等待直到连接到达(阻塞)
客户端套接字方法
connect() 主动发起 TCP服务器连接
connect_ex() connect()的扩展版本,此时会以猎误码的形式返回问题,而不是抛出一个异常
通用套接字方法
recv() 接收 TCP消息
recv_into() 接收TCP 消息到指定的缓冲区
send() 发送TCP消息
sendall() 完整地发送 TCP消息
recvfrom() 接收 UDP消息
recvfrom_into() 接收 UD

最低0.47元/天 解锁文章
1万+






