整个流程是客户端想服务端发信息,服务端返回大写后的消息
从代码中可以看出UDP与TCP的差异:
UDP是将数据丢进套接字之前,必须为分组指定目的地址
TCP是client向服务端申请连接,会有一个欢迎的套接字,即代码中的serverSocket,之后服务端会为客户创建一个专门的连接套接字,即connectionSocket,用于通信
其中clientSocket = socket(AF_INET, SOCK_DGRAM)
就是创建socket第一个参数指明底层网络使用IPV4,第二个参数说明是SOCK_DGRAM是UDP连接,SOCK_STREAM是TCP连接
UDP
client.py
from socket import *
serverName = '127.0.0.1'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)
message = input('Input lowercase sentence:')
clientSocket.sendto(message.encode(), (serverName, serverPort))
modifiedMessage, serverAddress = clientSocket.recvfrom(2048)
print(modifiedMessage)
clientSocket.close()
server.py
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('', serverPort))
print('the server id ready to receive')
while True:
message, clientAddress = serverSocket.recvfrom(2048)
modifiedMessage = message.upper()
serverSocket.sendto(modifiedMessage, clientAddress)
TCP
client.py
from socket import *
serverName = '127.0.0.1'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
message = input('Input lowercase sentence:')
print(type(message))
clientSocket.send(message.encode())
modifiedMessage = clientSocket.recv(2048)
print('from Server : ', modifiedMessage)
clientSocket.close()
server.py
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 1:
connectionSocket, addr = serverSocket.accept()
sentence = connectionSocket.recv(1024)
capitalizedSentence = sentence.upper()
connectionSocket.send(capitalizedSentence)
connectionSocket.close()