传输层tcp协议以及scoket套字节方法

一、传输层

1、传输层的由来:

网络层的IP帮我们区分子网

以太网的Mac帮我们找到主机

所以通过IP和Mac找到了一台特定的主机

如何找到该特定主机的应用程序呢?

答案是通过端口,端口即应用程序与网卡关联的编号

2、传输层的功能:

建立端口与端口的通信

补充:端口范围0-65535 ,0-1023为系统占用端口

二、TCP协议

又称为好人协议以及可靠协议

tcp是可靠的数据传输:

最可靠的方式就是得不到确认,就重新发送数据报,知道得到对方的确认为止

TCP建立了一个双向通路,实现了数据的三次握手和四次挥手

三、socket介绍

定义:

socket是应用层与TCP/IP协议族通信的中间软件抽象,他是一组接口。

服务端套接字函数

s.bind()绑定(主机、端口号)到套字节

s.listen()开始TCP监听

s.accept()被动接受TCP客户的连接,(阻塞式)等待连接的到来

客户端套字节函数

s.connect()主动初始化TCP服务器连接

公共用途的套字节函数

s.recv()接收数据

s.send()发送数据

s.sendall()发送完整数据

s.close()关闭套字节

                             

四、简单远程执行命令程序的开发
#客户端
import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
phone.bind(('127.0.0.1',)) #插手机卡,补充:- -1024给系统用的
phone.listen() # 开机 print('start...')
conn,client_addr=phone.accept() # 等电话连接
print('连接来了:',conn,client_addr) # 收发消息
msg=conn.recv() #收消息,1024是一个最大的限制
print('客户端的消息: ',msg)
conn.send(msg+b'SB') # 挂电话
conn.close()
# 关机
phone.close() #服务端
import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
phone.connect(('127.0.0.1',)) # 拨电话,地址为服务端的ip和端口 phone.send('你好'.encode('utf-8')) # 发消息b'hello'
data=phone.recv() #收消息 print(data.decode('utf-8'))

五、加上通讯循环与连接循环

#服务端
import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
phone.bind(('127.0.0.1',))
phone.listen() print('start...')
while True: # 连接循环
conn,client_addr=phone.accept()
print('客户端 ',client_addr) while True: # 通信循环
try:
msg=conn.recv()
print('客户端的消息: ',msg)
conn.send(msg+b'SB')
except ConnectionResetError:
break
conn.close()
phone.close() #客户端1
mport socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
phone.connect(('127.0.0.1',)) # 拨电话,地址为服务端的ip和端口 while True:
msg=input('>>>: ').strip()
phone.send(msg.encode('utf-8')) # 发消息b'hello'
data=phone.recv() #收消息 print(data.decode('utf-8')) phone.close() #客户端2
mport socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 买电话
phone.connect(('127.0.0.1',)) # 拨电话,地址为服务端的ip和端口 while True:
msg=input('>>>: ').strip()
phone.send(msg.encode('utf-8')) # 发消息b'hello'
data=phone.recv() #收消息 print(data.decode('utf-8')) phone.close() #客户端3、.........
    
上一篇:SpringBoot源码学习系列之异常处理自动配置


下一篇:springboot秒杀课程学习整理1-2