无连接不可靠的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 主要依靠校验和、序列号、确认应答、超时重传、连接管理、流量控制、拥塞控制来实现可靠传输。