06python基础进阶之网络编程

一. IP地址

ip是可联网设备在网络中的逻辑地址,在同一网络中是唯一的
1、IP地址作用:
    用来在网络中标记某个设备
2、查看ip地址:
    ifconfig/ipconfig查看网卡信息
3、测试连通性:ping 域名/IP地址
4、IP地址分类:(了解)
    192.168.xxx.xxx  私有ip
    127.0.0.1 环回地址(本机ip地址)

二. 端口 port

1、作用
    端口是传输数据的通道,好比教室的门,是数据传输必经之路
    端口号用来标识主机中的网络进程
2、端口号范围和知名端口
    端口号范围:0-65535
    知名端口范围:0-1023
    知名端口列举:
        80 HTTP服务
        21 FTP服务
        23 telnet服务
        22 ssh服务
        443 HTTPS服务

三、socket套接字

1、不同电脑上进程通信如何标识
    IP地址+端口号
2、socket是什么
    socket是进程间通信的一种方式,简称套接字
3、socket的作用
    使用socket套接字来完成进程间的通信

四、TCP介绍

TCP 即传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议。
TCP特点:
1、面向连接
    在通信之前需要先创建连接,通信完成后,再断开连接
2、可靠传输  
    TCP 采用发送应答机制
    超时重传
    错误校验
    流量控制和阻塞管理

五、TCP客户端程序的开发流程

1、创建tcp套接字
2、跟服务器建立链接
3、发送数据
    3.1、发送数据
    3.2、接收数据
4、关闭tcp套接字

六、TCP服务端

1、实现流程(列举生活中例子)
    生活中如何使用手机?
    1、买手机   ------------>(创建一个tcp_server_socket服务端对象 )
    2、插入手机卡、使手机有电话号码 ------------>(绑定端口)
    3、把手机设置为接听状态 ------------> (tcp_server_socket.listen())
    4、等着别人打电话 ------------> (new_socket, client_address = tcp_server_socket.accept())
    5、通话聊天(收发数据) ------------> ( .recv()     .send())
    6、挂断电话 ------------> (new_socket.close())
    7、晚上11点睡觉,关机 ------------> (tcp_server_socket.close())

2、具体实现流程
    1、创建tcp服务端套接字
    2、绑定端口
    3、设置套接字对象为被动监听状态,因为默认是主动的
    4、阻塞等待接收客户端的连接
    5、收发数据
    6、关闭新创建出来的套接字
    7、关闭tcp服务端套接字

3、tcp服务器如何循环接收一个客户端消息?
    while True:
        # 5、收发数据
        recv_data = new_socket.recv(1024)
        print("接收到来自%s的消息:%s" % (addr, recv_data.decode("gbk")))
        new_socket.send("收到了你的消息".encode())

4、tcp服务器如何循环为多个客户端提供服务?

5、recv返回值的含义
    正常情况下 在通信过程中recv函数的返回值就是 接收到的数据
    如果客户端先断开了TCP连接,那么recv()将会解阻塞,接收到一个0字节数据

七、 OSError: [Errno 98] Address already in use产生原因和解决办法

1、产生时机
    pycharm运行tcp服务端,已经有客户端连接的情况下,服务器先断开连接, 之后马上重启服务器

2、产生原因    
    现象:
        pycharm后台会继续让程序再执行一会(端口会被占用多一些时间)
    原因:
        TCP协议规定 - 2MSL时间(1-4min, 实际一般30s到2min) 内主动断开连接的一方  不能重新绑定 刚刚使用的端口


3、怎么解决: 在绑定端口之前设置套接字重用地址选项
    设置套接字选项的目的:   
        忽略2MSL时间限制 可以立即重新绑定 刚刚使用的端口
    
    设置套接字选项 set socket option 针对套接字设置选项  重用地址选项     1设置 0取消
    socket.SOL_SOCKET表示当前套接字
    socket.SO_REUSEADDR表示重用地址选项
    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值