python_day31_socket

socket

一:什么是socket(套接字)

socket是一个模块,把复杂的tcp/ip协议隐藏在socket接口后面.  位置处于应用层与tcp/ip协议通信的中间软件抽象层,是一组接口,符合socket就相当于符合了tcp/ip协议.

socket在OSI模型中的位置

 

 

 

二.为什么需要socket

在osi模型中 若想实现通讯  需要打通七层结构  十分繁琐

socket就是把传输层以下的协议封装起来,方便使用  只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。

三.socket中两种类型

1> 基于文件类型的  AF_UNIX

unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信

2>基于网络类型的   AF_INET

socket默认指定AF_INET   因为绝大多数是基于网络通讯的

四.Python中socket

主要分为客户端和服务器

# 服务器版本
#
当成一个买手机接听电话的过程 # 接收收据可能会出错 故放在try里尝试 import socket server= socket.socket() # 买手机 server.bind(('127.0.0.1',1999)) # 插卡 指定自己地址 和 端口 默认127.0.0.1是自身地址, 端口就是一个整数 注意:这时是元祖 server.listen() # 手机监听过程 while True: client_socket,client_addr = server.accept() # 接电话 buffer_size = 1024 # 设定缓存区域 while True: try: data =client_socket.recv(1024) # 收数据 if not data: client_socket.close() # 如果没有接收到数据 意味着对方下线 就关闭通道 break print('收到了数据',data.decode('utf-8')) # 接收到的都是二进制格式 需要转化 client_socket.send(data.upper()) # 发数据 except: # 上面运行错了就运行下面的 上面没错就运行上面的下面的步骤不走了 client_socket.close() # # 如果对方下线了 那服务器也应该关闭对应的客户端对象 break
客户端版本

#  相当于买手机通话
#  发送数据和接受数据容易出错 放在try里尝试

import socket

client = socket.socket()  #  买个手机
# 不需要插卡  是系统自动分配地址的  故不用插卡操作

client.connect(('127.0.0.1',1999))  # 连接到ip和端口

while True:
    msg = input('输入内容(q退出)').strip()
    if msg == 'q':
        break
    if not msg:
        continue
        # 发送的顺序要和服务器相反
    client.send(msg.encode('utf-8')) #  发送数据
    print('sending')
    data = client.recv(1024)  # 接受数据
    print(data.decode('utf-8'))

client.close()  #  运行完关闭通道

 

转载于:https://www.cnblogs.com/wakee/p/10939731.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值