SOCKET编程之:TCP UDP 通信技术

什么是socket
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

什么是 TCP UDP呢,不懂的,送概念连接一份:

https://baike.baidu.com/item/UDP/571511?fr=aladdin

https://baike.baidu.com/item/TCP/IP%E5%8D%8F%E8%AE%AE

简单来讲,TCP 是应用于客户端与服务器传输的协议,比如你的电脑与新浪网服务器之间的数据传输;UDP是应用于两个客户端之间的数据传输的,比如蓝牙功能文件互传,两台手机进行qq视频通信等(表述不科学,但有助于理解).

SOCKET编程之:TCP UDP 通信技术_第1张图片

UDP传输

#服务端,放在一个py文件中
import socket
# 创建udp服务器socket,sock_dgram,以数据报的形式传输
serviceUdpSocekt = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 给服务器绑定一个地址,端口
serviceUdpSocekt.bind(("111.111.111.1",33333))

while True:
	#1024,一次接收的数据大小
    data,address = serviceUdpSocekt.recvfrom(1024)
    #编码
    print("客户端说:%s"%data.decode("utf-8"))
    print(address)
    sendData = input("服务器说:")
    # 发送
    serviceUdpSocekt.sendto(sendData.encode("utf-8"),address)
#客户端,另起一个py文件
import socket
clientUdpSocket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
while True:
    sendData = input("客户端说:")
    #如果放在两个电脑运行,别忘更改端口号啊
    clientUdpSocket.sendto(sendData.encode("utf-8"),("111.111.11.1",33333))
    recvData,add = clientUdpSocket.recvfrom(1024)
    print("服务器说:%s"%recvData.decode("utf-8"))
    print(add)

把两个py文件都运行起来,就能实现简单的udp通信了,

SOCKET编程之:TCP UDP 通信技术_第2张图片
SOCKET编程之:TCP UDP 通信技术_第3张图片

TCP传输

#TCP服务端
import socket
# 创建一个servicesocke,以数据流的形式传输数据
serviceSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 给服务器绑定地址(ip地址,端口号)
serviceSocket.bind(("111.111.11.1",22222))
# 设置可以连入的客户端数量,即同时最多连入5个客户端
serviceSocket.listen(5)
print("等待客户端接入")

# 等待客户端的接入
# sock 是客户端的socket信息
# addr 是客户端的地址(ip,端口)
sock,addr = serviceSocket.accept()
print("sock:%s"%sock)
print(addr)
print("客户端已经接入")

while True:
    # 接收客户端的请求
    recvData = sock.recv(1024)
    print("客户端说:%s"%(recvData.decode("utf-8")))
    sendData = input("服务器说:")
    # 发送(回复)数据给客户端
    sock.send(sendData.encode("utf-8"))
import socket
# 创建客户端socket
clientSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 连接上服务器
clientSocket.connect(("11.111.111.11",22222))
while True:
    # 发送消息给服务器
    sendData = input("客户端说:")
    clientSocket.send(sendData.encode("utf-8"))
    recvData = clientSocket.recv(1024)
    print("服务器说:%s"%(recvData.decode("utf-8")))
   

注意: tcp传输就不能像udp那样,自己在一台电脑上玩耍了,需要小伙伴的帮忙哦,以你的电脑为客户端,他的电脑为服务器,两个尽情的说悄悄话吧!

以上代码非原创,只做分享只用.

你可能感兴趣的:(Python基础)