【python3基础学习】【第7周】网络编程socket

本文介绍了Socket的概念,强调它作为进程间通信的一种方式,并对比了它与文件操作的区别。文章详细讲解了Socket的地址簇(如AF_INET、AF_UNIX)和类型(如SOCK_STREAM、SOCK_DGRAM)。接着,通过一个服务器端和客户端的单次及多次收发模型案例,展示了Socket通信的基本流程。在多次收发模型中,提到了客户端断开连接时,服务器端可能需要处理接收空数据的情况。
摘要由CSDN通过智能技术生成


一、Socket概述

1、概念

  • Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。
  • socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)
  • socket和file的区别:
  1. file模块是针对某个指定文件进行【打开】【读写】【关闭】
  2. socket模块是针对服务器端客户端Socket 进行【打开】【读写】【关闭】

2、注意点

  • 客户端:
    socket通信时,需要使用到ip+端口号的形式,客户端往服务器端发送请求时,会带一个随机的端口号进行请求;
  • 服务器端:
    listen(0.0.0.0, 6969)代表监听所有网卡(ip)的6969端口,当前也可以写具体网卡ip;

3、Socket Families(地址簇)

These constants represent the address (and protocol) families, used for the first argument to socket(). If the AF_UNIX constant is not defined then this protocol is unsupported. More constants may be available depending on the system.

地址簇种类:

  • socket.AF_UNIX unix本机进程间通信
  • socket.AF_INET IPV4
  • socket.AF_INET6 IPV6

4、Socket Types

These constants represent the socket types, used for the second argument to socket(). More constants may be available depending on the system. (Only SOCK_STREAM and SOCK_DGRAM appear to be generally useful.)

  • socket.SOCK_STREAM # for tcp
  • socket.SOCK_DGRAM # for udp
  • socket.SOCK_RAW # 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
  • socket.SOCK_RDM # 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
  • socket.SOCK_SEQPACKET # 废弃了

二、Socket通信案例

1. 一个服务器端一个客户端_单次收发模型

1. 服务器端

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Author: Mason
import socket

# 声明socket类型, 同时生成socket连接对象, 默认为ipv4, tcp协议类型
server = socket.socket()
# 绑定要监听端口
server.bind(("localhost", 6969))
# 开始监听
server.listen()

# 等待客户端请求
# conn就是客户端连过来, 在服务器端为其生成的连接实例
conn, addr = server.accept()
# 可以看到客户端连过来时, 会随机生成一个端口号, 进行连接
print("CONN:{conn}\nADDR:{addr}".format(<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值