什么是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视频通信等(表述不科学,但有助于理解).
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通信了,
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那样,自己在一台电脑上玩耍了,需要小伙伴的帮忙哦,以你的电脑为客户端,他的电脑为服务器,两个尽情的说悄悄话吧!
以上代码非原创,只做分享只用.