通过上篇文章已经看到很多应用层的应用程序,典型的网络应用是由一对程序(客户程序和服务器程序)组成的,它们位于两个不同的端系统中,当运行这两个程序时,创建了一个客户进程和服务器进程,同时它们通过从套接字读出和写入数据在彼此之间进行通信,开发者创建一个网络应用时,其主要任务就是编写客户程序和服务器程序的代码。
我们将使用下列简单的客户-服务器应用程序
来演示对于UDP和TCP的套接字编程:
1)
客户从键盘读取一行字符,并将该字符向服务器发送。
2)
服务器接收该数据并将这些数据转化为大写。
3)
服务器将修改过的数据发送给客户端。
4)
客户端接收修改后的数据并在其监视器上显示出来。
其实这就是一个简单的回声服务器,我们用来测试一下TCP和UDP实现套接字编程的进程间通信。
UDP实现
下图显示了客户和服务器主要的套接字相关的活动:
假设服务器已经在运行,我们先看一下客户端的代码设计:
// UDPClient.py
from socket import *
serverName = 'hostname'
serverPort = 12000
clientSocket = socket(AF_INET,SOCK_DGRAM)
message = raw_input('Input lowercase sentence:')
clientSocket.sendto(message.encode(),(serverName,serverPort))
modifiedMessage,serverAddress = clientSocket.recvfrom(2048)
print(modifiedMessage.decode())
clientSocket.close()
解释:看一下各行代码
from socket import *
该socket模块形成在python中所有网络通信的基础。
serverName = 'hostname'
serverPort = 12000
这里提供了服务器的名称和端口号,服务器名称可以提供主机名(例如:cis.poly.edu)也可以提供IP地址,如果提供了主机名,那么将自动执行DNS从而得到IP地址。
clientSocket = socket(AF_INET,SOCK_DGRAM)
创建了套接字,用于交互信息的套接字,这里有两个参数,第一个是指地址簇&#x