UDP/TCP套接字编程示例实现
UDP 本机
# UDPClient
from socket import *
serverName = 'localhost'
serverPort = 12000
clientSocket = socket(AF_INET,SOCK_DGRAM)
message = input()
clientSocket.sendto(message.encode(),(serverName,serverPort))
modifiedMessage,serverAddress = clientSocket.recvfrom(2048)
print(modifiedMessage.decode())
clientSocket.close()
# UDPServer
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET,SOCK_DGRAM)
serverSocket.bind(('',serverPort))
print('Ready to receive')
while True:
message,clientAddress = serverSocket.recvfrom(2048)
modifiedMessage = message.decode().upper()
serverSocket.sendto(modifiedMessage.encode(),clientAddress)
先运行UDPServer
在另一个终端里运行UDPClient服务器返回了大写的字符串,实验成功。
在服务器进程运行的过程中,可以多次使用客户端进程访问使用服务。
TCP本机
# Client
from socket import *
serverName = "192.168.2.17"
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
sentence = input('Input lowercase sentence:')
clientSocket.send(sentence.encode())
modifiedSentence = clientSocket.recv(1024)
print('From Server:', modifiedSentence.decode())
clientSocket.close()
# Server
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('', serverPort))
serverSocket.listen(1)
print('The server is ready to receive')
while True:
connectionSocket, addr = serverSocket.accept()
sentence = connectionSocket.recv(1024).decode()
capitalizedSentence = sentence.upper()
connectionSocket.send(capitalizedSentence.encode())
connectionSocket.close()
与其他host连接测试
只需要将上述代码的serverName修改成其他host的ip地址即可
运行UDP
运行TCP
P28
a
在运行TCPServer之前运行TCPClient将会发生什么现象?为什么?
这是由于Server没有启动,相应的端口无法连接
b
在运行UDPServer之前运行UDPClient将会发生什么现象?为什么?
由于服务器断开,远程主机无法连接,抛出异常,UDP服务终止监听
c
Server和Client使用不同端口将会发生什么
UDP下
TCP下
可以发现使用不同端口的情况和在未启动服务器时启动客户端的情况一致,均表现为无法连接