我这里的环境是在真机上下载了一个 pycharm 进行编写
并且还开了两台虚拟机
一台为win7 下载了一个网络调试助手,因为等会编写的时候分为客户端和服务端,当我们编写了客户端或者服务端,可以用图形化的网络调试助手去当对象,图形化简单易上手
另一台为Ubuntu,直接把python3下载好,当我们自己编写完客户端和服务端,把另一半放到ubuntu上直接跑就行
具体的安装软件安装过程我就不做过多的介绍,如果不会安装py3的环境或者pycharm网上一搜教程就一大堆
这几章节我会简单的介绍一下socket套接字的基础用法,不会太过深入
套接字的介绍
套接字(Socket)是计算机网络编程中的一种抽象概念,它提供了一种通信机制,使得不同计算机之间可以进行数据交换和通信。套接字可以看作是网络通信的端点,通过套接字可以建立网络连接、发送和接收数据。
地址族(Address Family):套接字使用地址族来指定网络协议的类型。常见的地址族包括 IPv4(
AF_INET
)、IPv6(AF_INET6
)和本地套接字(AF_UNIX
)。地址族定义了套接字的寻址方式和网络协议。套接字类型(Socket Type):套接字类型定义了套接字的通信方式。常见的套接字类型包括流套接字(
SOCK_STREAM
)和数据报套接字(SOCK_DGRAM
)。流套接字提供可靠的、面向连接的通信,而数据报套接字提供无连接的、不可靠的通信。协议(Protocol):套接字在创建时可以指定特定的协议。如果地址族和套接字类型都指定了默认协议,可以省略该参数。常见的协议包括 TCP(
IPPROTO_TCP
)和 UDP(IPPROTO_UDP
)。套接字通信模型:套接字通信可以使用两种主要模型:面向连接和无连接。面向连接模型使用 TCP 协议,在通信之前需要建立连接,然后进行可靠的、有序的数据传输。无连接模型使用 UDP 协议,每个数据包都是独立的,不需要建立连接,但可能面临丢失、重复、乱序等问题。
套接字地址:套接字通过地址来标识和定位网络上的特定进程或主机。对于 IPv4 地址,通常由 IP 地址和端口号组成;对于 IPv6 地址,由 IPv6 地址和端口号组成。套接字地址用于建立连接、发送和接收数据。
套接字操作:套接字提供了一组操作来进行网络通信。这些操作包括创建套接字、绑定地址、监听连接、接受连接、建立连接、发送数据、接收数据和关闭套接字等。
套接字选项:套接字提供了一些选项,用于设置套接字的行为和属性。例如,设置套接字的超时时间、启用广播、复用地址等。
阻塞和非阻塞套接字:套接字可以设置为阻塞或非阻塞模式。在阻塞模式下,套接字的操作会一直阻塞,直到完成或出错。在非阻塞模式下,套接字的操作会立即返回,无论是否完成。
当涉及到网络编程时,Python 的
socket
模块是一个非常有用的工具。它提供了一种用于创建和操作网络套接字的高级接口。通过使用socket
模块,您可以构建各种网络应用程序,包括客户端和服务器。下面是对 Python
socket
模块的详细介绍:
创建套接字:使用
socket.socket()
函数创建套接字对象。它接受两个参数,第一个参数是地址族(如socket.AF_INET
表示 IPv4,socket.AF_INET6
表示 IPv6),第二个参数是套接字类型(如socket.SOCK_STREAM
表示 TCP,socket.SOCK_DGRAM
表示 UDP)。绑定地址:对于服务器,需要将套接字绑定到一个特定的地址和端口上,以便客户端可以连接到它。使用
socket.bind()
方法将套接字绑定到指定的地址和端口。监听连接:对于服务器,可以使用
socket.listen()
方法开始监听连接。它接受一个参数,指定在连接队列中等待的最大连接数。接受连接:服务器可以使用
socket.accept()
方法接受客户端的连接请求。它返回一个新的套接字对象和客户端的地址,通过该套接字可以与客户端进行通信。建立连接:客户端可以使用
socket.connect()
方法连接到服务器。它接受一个参数,指定服务器的地址和端口。发送和接收数据:通过套接字对象的
send()
和receive()
方法,可以发送和接收数据。对于 TCP 套接字,使用send()
发送数据,使用recv()
接收数据;对于 UDP 套接字,使用sendto()
发送数据,使用recvfrom()
接收数据。关闭套接字:使用
socket.close()
方法关闭套接字连接。这只是
socket
模块的基本用法,它还提供了其他功能,如设置套接字选项、获取套接字信息、处理异常等。您可以查阅 Python 官方文档或其他网络编程教程,以获得更详细的信息和示例代码。需要注意的是,网络编程涉及到网络安全和错误处理等复杂的问题。在实际应用中,您可能需要处理超时、异常情况、数据的编码和解码等。确保在编写网络应用程序时,对这些问题进行适当的处理和安全考虑。