python--网络知识,及socket 小试

1,OSI七层网络协议,及传输层

OSI的七层分层:

应用层:为应用程序提高服务

表示层:负责数据格式的转化和加密服务

会话层:负责建立与维护会话

传输层:建立与管理端到端的连接  TCP/UDP

网络层  :IP地址及路由选择 IP/ICMP

数据链路层:提供介质访问及链路管理  ARP/RARP

物理层:即物理设备

以下对各层的解释转载来自:https://www.jmjc.tech/tutorial/python/51

物理层:主要是物理通信的媒介,比如 光纤电缆电磁波 等...

数据链路层:把电脑通过物理介质(光纤,WiFi ...)串联起来,组成 局域网,也是我们常说的内网【局域网的通信通过 MAC 地址】

网络层:这一层的主要设备是 路由,路由的工作是把无数的局域网组合起来,成为 互联网。到这里,我们就能上网了。【互联网的通信通过IP】

传输层:通过网络层,两台电脑能交流了,但是两台电脑的交流通常是两个软件之间的交流,传输层负责的,就是把信息转发到对应的软件上。【每个软件都有特定的端口,传输层的通信通过端口】

应用层:应用层还可以在拆分三层 会话层表示层应用层,但是整体一样,我们就统一称呼。这一层主要是对 传输层的封装,用于解决一些特定的领域,例如 HTTP协议DNS协议 等... 都是应用层协议。

 

 

HTTP/HTTPs/FTP/SMTP是应用层协议,但是也囊括了表示层会话层的作用。

socket 是传输层协议TCP和UDP的应用。传输层实现端到端的通信,每个传输层连接两个端点。端点是什么?端点就是套接字(so ke t)RFC973规定:端口号的拼接IP地址构成了套接字,即形如:(主机IP地址:端口号)

2,socket

socket方法:

socket()创建套接字

bind()指定本地地址

connect()将套接字连接到目的地址

listen()设置等待连接状态,listen函数将socket变为被动类型的,等待客户的连接请求。

accept()建立连接

 

 

图来自:https://blog.csdn.net/weixin_39258979/article/details/80835555

 

3,栗子

服务器端

import socket
import threading

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建socket对象

s.bind(('127.0.0.1', 9999))#绑定本地地址

s.listen(5)#设置等待链接状态

def lind_handle_data(conn,addr):
    name=threading.current_thread().name
    print(name)
    data = conn.recv(1024).decode('utf-8')
    data+=","+name
    conn.send(data.encode('utf-8'))
    conn.close()


while True:
 conn, addr = s.accept()
 t=threading.Thread(target=lind_handle_data,args=(conn,addr))
 t.start()

服务器端采用多线程,等待连接,每次一个连接启动一个线程处理

客户端

import socket

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM);

s.connect(('127.0.0.1', 9999))
s.sendall(b'hello')
data=s.recv(1024)
print(data)
s.close()

客户端每次启动,获得输出结果:

yxxdeMacBook-Pro:python_learn yxx$ python3 python_socket_client.py

b'hello,Thread-1'

yxxdeMacBook-Pro:python_learn yxx$ python3 python_socket_client.py

b'hello,Thread-2'

yxxdeMacBook-Pro:python_learn yxx$ python3 python_socket_client.py

b'hello,Thread-3'

yxxdeMacBook-Pro:python_learn yxx$ 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值