传输层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',8081)) #插手机卡,补充:0-65535 0-1024给系统用的 phone.listen(5) # 开机 print('start...') conn,client_addr=phone.accept() # 等电话连接 print('连接来了:',conn,client_addr) # 收发消息 msg=conn.recv(1024) #收消息,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',8081)) # 拨电话,地址为服务端的ip和端口 phone.send('你好'.encode('utf-8')) # 发消息b'hello' data=phone.recv(1024) #收消息 print(data.decode('utf-8'))
五、加上通讯循环与连接循环
#服务端 import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) phone.bind(('127.0.0.1',8081)) phone.listen(5) print('start...') while True: # 连接循环 conn,client_addr=phone.accept() print('客户端 ',client_addr) while True: # 通信循环 try: msg=conn.recv(1024) 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',8081)) # 拨电话,地址为服务端的ip和端口 while True: msg=input('>>>: ').strip() phone.send(msg.encode('utf-8')) # 发消息b'hello' data=phone.recv(1024) #收消息 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',8081)) # 拨电话,地址为服务端的ip和端口 while True: msg=input('>>>: ').strip() phone.send(msg.encode('utf-8')) # 发消息b'hello' data=phone.recv(1024) #收消息 print(data.decode('utf-8')) phone.close() #客户端3、4.........
python之基础知识大全