标签:decode 地址 链路层 链接 类型 电信号 end socket listen
OSI七层模型包括:其作用在于不断地给传输的内容加东西
应用层
表示层
会话层
传输层 UDP/TCP +端口
网络层 ip协议, +ip地址
数据链路层 以太网协议 +mac
物理层 电信号
传输层涉及到的:tcp协议:面向链接(打电话),不丢。建立了一个全双工的通道;传输是面向字节流的
udp协议:面向无连接(写信),可能会丢。传输是面向报文、数据包的
重点:tcp协议的三次握手,四次挥手
挥手
1客户端先发,申请建立链接
2服务端收到后回馈,发送确认信息
3客户端收到后表示收到
握手
1客户端请求
2服务端说我收到,请稍等
3服务端处理数据,全部结束后,发我已结束,不会丢失
4客户端说,好,那咱断开
tcp与udp下的socket 差一个监听与确认链接的过程
TCP的多人聊天在listen后面在参数表示最大的等待数量,必须一客户端的链接断开了后面的才能进行
UDP的多人聊天如果同时发,服务端回复第一个才会收到第二个人发来的消息
服务端
import socket #导入socket模块 server = socket.socket() #创建socket对象 ip_port = (‘121.195.167.34‘,8002) #设置一个ip地址和端口号 server.bind(ip_port) #绑定ip和端口号 server.listen(3) #监听ip和端口号 while 1: conn,addr = server.accept() #等待建立连接,前者为建立的连接通道,后者为客户端地址 while 1: from_client_msg = conn.recv(1024) #通过recv方法,参数是字节(b),1024即为1kb,指一次性接受的消息大小 print(from_client_msg.decode(‘utf-8‘)) if from_client_msg.decode(‘utf-8‘) == ‘再见‘: break send_client_msg = input(‘服务端说:‘) #conn.send(b‘replay‘.encode(‘utf-8‘)) #回复消息,通过send方法,参数必须是字节类型 conn.send(send_client_msg.encode(‘utf-8‘)) conn.close() #关闭通道,通过close方法 #server.close() #关闭服务器
客户端
import socket import time client = socket.socket() #创建一个socket对象 server_ip_port = (‘121.195.167.34‘,8002) #找ip和端口号 client.connect(server_ip_port) #利用ip和端口号连接服务器程序 while 1: send_server_msg = input(‘客户端说:‘) if send_server_msg == ‘再见‘: client.send(send_server_msg.encode(‘utf-8‘)) break client.send(send_server_msg.encode(‘utf-8‘)) #发消息,用send方法,字节类型 #client.send(‘你好‘.encode(‘utf-8‘)) #中文 # client.send(str(time.time()).encode(‘utf-8‘)) from_server_msg = client.recv(1024) #通过recv方法,参数是字节(b),1024即为1kb,指一次性接受的消息大小 print(from_server_msg.decode(‘utf-8‘)) client.close()
OSI七层模型与TCP/UDP初识(代码待补充,7.31补充)
标签:decode 地址 链路层 链接 类型 电信号 end socket listen
原文地址:https://www.cnblogs.com/shachengcc1/p/11273363.html