欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

计算机网络 -UDP和TCP的简单实现 -应用层

程序员文章站 2022-03-11 08:23:22
...

一、UDP套接字

1.1 UDPClient.py

import socket 
ServerName =  'HostName' #这里的HostName是指IP地址,如果是主机名的话程序也会自动调用DNS服务器对IP地址进行查找
ServerPort = 12345#这里的端口号大家看心情给哈,我这个是随机的
clientsocket = Socket(AF_INET,SOCK_DGRAM)#这里的AF_INET指的是Ipv4,而后面那个SOCK_DGRAM指的是使用的协议是UDP
message = raw_input('请输入你要发送的信息:')#raw_input可以将后面的字符串作为提示信息,然后记录下接下来一行输入的信息
clientsocket.sendto(message.encode(),(ServerName,ServerPort))#这里使用encode是因为套接字只接受字节编码所以需要转换,而socket使用sendto表示想要发什么以及发给谁
modifiedMessage,serverAddress = clientsocket.recvfrom(2048)#modifiedMessage表示的是服务器发送给客户的信息(不过还是字节形式)
print(modifiedMessage.decode())#读取信息
clientsocket.close()

1.2UDPServer

import sockey
ServerPort = 12345
ServerSocket = Socket(AF_INET,SOCK_DRRAM)
ServerSocket.bind(('',ServerPort))#初始化接收,等待客户发送信息
print('服务器准备完毕,等待客户端...')
while True:
	message,ClientAddress = ServerSocket.recvfrom(2048)
	moddifiedMessage = '收到信息:'+message.decode()
	ServerSocket.sendto(moddifiedMessage.encode(),(ClientAddress,ServerPort))

二、TCP套接字

2.1 TCPClient

import socket
ServerHost = 'HostName'
ServerPort = 54321
ClientSocket = socket(AF_INET,SOCK_STREAM)
ClientSocket.connect(ServerHost,ServerPort)#先建立握手连接,后面的连接是服务器重新创建的连接套接字,和这一个connect不是同一个
Message = raw_input('请输入要发送的信息')
ClientSocket.sendto(Message.encode())
ModdifiedMessage, ServerHost = ClientSocket.recv(2048)
print(ModdifiedMessage.decode())#服务器的回复
ClientSocket.close()

2.2 TCPServer

import socket
ServerPort = 54321
ServerSocket = socket(AF_INET,SOCK_STREAM)
ServerSocket.bind(('',ServerPort))
ServerSocket.listen(1)#这里规定请求连接的最大数
print('服务器已准备就绪,等待客户端发送消息..')
while True:
	connectionSocket,addr = ServerSocket.accept()#同意客户发送的第二个socket
	sentence = connectionSocket.recv(2048),decode()
	capitalizedSentence = "已经收到:"+sentence
	connectionSocket.send(capitalizedSentence.encode())#注意这里使用的是send而不是sendto
	connectionSocket.close()#在UDP中Server不会主动关闭连接,但是在TCP中需要关闭每一个连接套接字。

2.3 TCP特点

  1. TCP可以保证服务器进程能够按发送的顺序接收。
  2. TCP会对请求的客户进程先进行一个握手连接,然后再重新生成一个套接字与客户进程连接。
  3. 操作系统自己就会将我们客户进程的信息写入。UDP其实也可以