登录
    Technology changes quickly but people's minds change slowly.

计算机网络-python UDP 与TCP socket 编程

技术宅 破玉 1273次浏览 0个评论

无连接不可靠的UDP socket 编程

首先我们编写客户端

#!/usr/bin/env python3
# -*-coding:utf-8 -*-
from socket import *
serverName='192.168.1.107'
severPort=12000
clientSocket=socket(AF_INET,SOCK_DGRAM)
message=input('input lowercase sentence:')
clientSocket.sendto(message.encode(),(serverName,severPort))
modifiedMessage,serverAddress=clientSocket.recvfrom(2048)
print(modifiedMessage.decode())
clientSocket.close()

我们看到我们只要知道了服务端的ip和端口号就能向服务端发送UDP报文,创建UDP socket 是SOCK_DGRAM
然后编写服务端

#!/usr/bin/env python3
# -*-coding:utf-8 -*-
from socket import *
severPort=12000
serverSocket=socket(AF_INET,SOCK_DGRAM)
serverSocket.bind(('',severPort))
print('the server is ready to receive')
while True:
    message,clientAddress=serverSocket.recvfrom(2048)
    print('receive from',clientAddress,'message:',message.decode())
    modifiedMessage=message.decode().upper()
    serverSocket.sendto(modifiedMessage.encode(),clientAddress)

服务端也是建立SOCK_DGRAM socket 并绑定12000 端口,程序启动后一直循环等待从客户端接收消息。
在上面的程序中我们看到UDP 只要简单知晓 服务器UDP 端口号就可以发送相关UDP报文。

面向连接的可靠的TCP socket 编程

客户端代码:

#!/usr/bin/env python3
# -*-coding:utf-8 -*-
from socket import *
serverName='192.168.1.107'
severPort=12000
clientSocket=socket(AF_INET,SOCK_STREAM)
clientSocket.connect((serverName,severPort))
message=input('input lowercase sentence:')
clientSocket.send(message.encode())
modifiedSentence=clientSocket.recv(1024)
print(modifiedSentence.decode())
clientSocket.close()

我们看到客户端创建的是SOCK_STREAM 类型的 socket ,并且在向服务端发送请求之前,先与服务端建立相关链接

clientSocket.connect((serverName,severPort))

这在UDP 中是不需要的
服务端代码

#!/usr/bin/env python3
# -*-coding:utf-8 -*-
from socket import *
severPort=12000
serverSocket=socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('',severPort))
serverSocket.listen(1)
print('the server is ready to receive')
while True:
    connectionSocket,addr=serverSocket.accept()
    sentence=connectionSocket.recv(1024).decode()
    print('receive from',addr,'message:',sentence)
    capitalizedSentence=sentence.upper()
    connectionSocket.send(capitalizedSentence.encode())
    connectionSocket.close()

TCP 服务端 也是需要先accept ,然后才能接收客户端发来的数据

    connectionSocket,addr=serverSocket.accept()

从上面两个例子我们简单看出 TCP 是面向连接的,而UDP 是无连接的,关于可靠性呢,tcp 主要依靠校验和、序列号、确认应答、超时重传、连接管理、流量控制、拥塞控制来实现可靠传输。


华裳绕指柔, 版权所有丨如未注明 , 均为原创|转载请注明计算机网络-python UDP 与TCP socket 编程
喜欢 (1)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址