在python中通常使用socket模块中的socket对象创建可以互相通信的服务器和客户端,在UDP无连接用户数据报协议编程中无特别明确的服务端和客户端,而在TCP(传输控制协议编程)中则有明确的服务端和客户端。
本文主要讲述在创建TCP服务端的一些模棱两可的原理问题,希望能够对读者产生帮助---------------套接字编程也叫socket编程也可以是网络编程,即如何在程序中实现两台计算机之间的通信。在上文提到的socket对象也叫套接字对象,它是python中用于网络编程的抽象,它代表了一个网络连接
我认为有疑难的代码如下:
#encoding-utf-8
import socket
# 创建一个TCP套接字对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
server_socket.bind(('127.0.0.1', 8899))
# 监听连接请求
server_socket.listen(5)
# 接受连接
client_socket, client_address = server_socket.accept()
在这段代码里,我们创建了一个TCP套接字对象,并绑定了本机地址和端口。而在
# 接受连接
client_socket, client_address = server_socket.accept()
该行代码中accept方法在无连接情况下将处于阻塞状态,一旦有连接情况下将返回tuple元组包含一个新的套接字对象和来自连接客户端的ip和端口地址。那为什么在UDP服务端中可以直接server_socket.recvfrom()获得接受数据,而在TCP中则要使用accept返回的新的套接字对象呢?
******重点-------------------------新的套接字对象和之前的套接字对象的主要区别在于它们的状态和用途。
之前的套接字对象是一个监听套接字,它用于监听连接请求。当有新的连接请求到达时,监听套接字会接受连接,并返回一个新的套接字对象。这个新的套接字对象用于与客户端进行通信。新的套接字对象是一个连接套接字,它用于与客户端进行通信。连接套接字可以发送和接收数据,也可以关闭连接。连接套接字的状态和用途与监听套接字不同。但它们的地址和端口是一样的,也就是说它们是同一个套接字对象的两种具有不同功能的状态。
以下是监听套接字和连接套接字的区别:监听套接字:用于监听连接请求,不能发送和接收数据。监听套接字的状态为LISTEN。
连接套接字:用于与客户端进行通信,可以发送和接收数据。连接套接字的状态为ESTABLISHED。