套接字编程
典型的网络应用是一对应用程序,也就是一个客户程序和一个服务器程序组成的,而运行在不同机器上的进程是彼此通过套接字来发送报文实现通信的。那么UDP和TCP的主要区别就是UDP是无连接的,而TCP是面向连接的。这就体现在在将分组放进套接字之前是否需要绑定上对应的地址。
UDP编程
UDP是无连接的,并且在客户发送数据之前,服务器要已经是运行状态。 其中端口号可以在主机上的众多应用程序中进行确定。
1、客户端
如下图是UDP的客户端编程。引入socket模块,可以实现在python中的所有网络通信的基础,这样的话,文末下面才可以进行套接字的创建。 severName和serverPort分别是所要发送的服务器的主机名和端口号。 之后进行套接字的创建:clientSocket=socket(AF_INET,SOCK_DGRAM),其中,AF_INET表明使用的是ipv4,而SOCK_DGRAM则说明使用的是UDP。 message是要发送的数据,这里是进行输入提示之后等待用户进行输入。 接着clientSocket.sendto()函数则是开始进行数据的发送。因为UDP是无连接的,所以在将分组放进套接字时候需要把地址也带进去。这是和TCP套接字编程的最大区别。 使用clientSocket.recvfrom()是用来获取服务器发送的分组数据以及服务器的地址(也有端口),但是实际上服务器的地址在一开始就已经被客户所知道了。 获取到返回数据之后,就可以进行输出了。在全部完成之后,就可以关闭套接字了,也就是可以关闭进程来。
2、服务器端
如下图是UDP的服务器相关编程。 serverSocket.bind()是将端口号与服务器绑定起来。这在TCP的服务器里面也有进行。 while True是确保服务器可以一直开机,进行服务。 其中的serverSocket.recvfrom()跟客户编程里面的很类似,这里是用来获取客户所发送的数据以及客户的地址,便于之后进行数据的传送。 serverSocket.sendto()个前面类似的是,我们仍然需要将地址和数据封装发送。
TCP编程
TCP是面向连接的,其特点是在进行传送之前是需要进行三次握手的。但是三次握手所用的套接字和后续真正传送数据所用的套接字不是同一个套接字。同样地,在整个过程中,服务器要先确保是一直“开机”状态。
1、客户端
如下图是TCP中的客户程序的相关编程。 模块的引用以及包含服务器的主机名和地址和UDP中的是一样的。 clientSocket=socket(AF_INET,SOCK_STREAM)与UDP中的类似,虽然都是进行套接字的创建,但是这里,AF_INET仍然表示使用的是IPV4,但是SOCK_STREAM则表示使用的是TCP,可靠的字节流传输。 下面的clientSocket.connect()就是进行的握手阶段,需要客户程序和服务器进行握手。 这里的sentence仍然是数据部分,等待用户进行输入。 TCP的发送部分,clientSocket.send(),就不需要将分组和地址封装起来一起发送,因为已经建立了连接。所以只需要将数据进行发送就可以实现成功的发送。 clientSocket.recv()类似一个缓冲,当收到回车字符的时候才会结束这一行。 最后就是关闭套接字,关闭进程。
2、服务器端
如下图是TCP中的服务器程序相关编程。 serverSocket.bind()仍然是进行服务器和端口的绑定。 serverSocket.listen()表示让服务器聆听来自客户的TCP连接请求。这里的1定义了请求连接的最大参数,通过这个也可以实现多进程。 while True也是保证服务器的一直开机状态。通过serverSocket.accept获取客户发来的数据以及其地址。 获取到的数据进行后续的大小写转换,之后再进行发送,最后就可以关闭套接字,关闭进程了。
|