什么是socket

socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:

它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的

例如我们每天浏览网页、QQ 聊天、收发 email 等等

在此解释一下什么是通信:
通:指互通,共用
信:指信息
通信:使信息在多个进程中被共用

下面讲解下 Socket模块功能

在 Python 中 使用socket 模块的函数 socket 就可以完成:

import socket
socket.socket(AddressFamily, Type)

套接字格式:socket(family, type[,protocal]) 使用给定的套接族,套接字类型,协议编号(默认为0)来创建套接字

Socket 参数

AddressFamily 描述
socket.AF_UNIX 用于同一台机器上的进程通信(既本机通信)
socket.AF_INET 用于服务器与服务器之间的网络通信(最常用)
socket.AF_INET6 基于IPV6方式的服务器与服务器之间的网络通信(不用)
Type 描述
socket.SOCK_STREAM 基于TCP的流式socket通信
socket.SOCK_DGRAM 基于UDP的数据报式socket通信
socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次SOCK_RAW也可以处理特殊的IPV4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头
socket.SOCK_SEQPACKET 可靠的连续数据包服务

创建TCP Socket:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

创建UDP Socket:

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

Socket 函数

TCP发送数据时,已建立好TCP链接,所以不需要指定地址,而UDP是面向无连接的,每次发送都需要指定发送给谁。
服务器与客户端不能直接发送列表,元素,字典等带有数据类型的格式,发送的内容必须是字符串数据(str)

服务器端 Socket 函数

Socket 函数 描述
s.bind(address) 将套接字绑定到地址,在AF_INET下,以tuple(host, port)的方式传入,如s.bind((host, port))
s.listen(backlog) 开始监听TCP传入连接,backlog指定在拒绝链接前,操作系统可以挂起的最大连接数,该值最少为1,大部分应用程序设为5就够用了
s.accept() 接受TCP链接并返回(conn, address),其中conn是新的套接字对象,可以用来接收和发送数据,address是链接客户端的地址

客户端 Socket 函数

Socket 函数 描述
s.connect(address) 链接到address处的套接字,一般address的格式为tuple(host, port),如果链接出错,则返回socket.error错误
s.connect_ex(address) 功能与s.connect(address)相同,但成功返回0,失败返回errno的值

公共 Socket 函数

Socket 函数 描述
s.send(string[, flag]) 发送TCP数据,将字符串中的数据发送到链接的套接字,返回值是要发送的字节数量,该数量可能小于string的字节大小
s.sendto(string[, flag], address) 发送UDP数据,将数据发送到套接字,address形式为tuple(ipaddr, port),指定远程地址发送,返回值是发送的字节数
s.sendall(string[, flag]) 完整发送TCP数据,将字符串中的数据发送到链接的套接字,但在返回之前尝试发送所有数据。成功返回None,失败则抛出异常
s.recv(bufsize[, flag]) 接受TCP套接字的数据,数据以字符串形式返回,buffsize指定要接受的最大数据量,flag提供有关消息的其他信息,通常可以忽略
s.recvfrom(bufsize[, flag]) 接受UDP套接字的数据u,与recv()类似,但返回值是tuple(data, address)。其中data是包含接受数据的字符串,address是发送数据的套接字地址
s.close() 关闭套接字
s.settimeout(timeout) 设置套接字操作的超时时间,timeout是一个浮点数,单位是秒,值为None则表示永远不会超时。一般超时期应在刚创建套接字时设置,因为他们可能用于连接的操作,如s.connect()
s.gettimeout() 返回当前超时值,单位是秒,如果没有设置超时则返回None
s.setblocking(flag) 如果flag为0,则将套接字设置为非阻塞模式,否则将套接字设置为阻塞模式(默认值)。非阻塞模式下,如果调用recv()没有发现任何数据,或send()调用无法立即发送数据,那么将引起socket.error异常。

python网络编程之 一 socket(套接字)相关推荐

  1. 计算机网络(二) | 网络编程基础、Socket套接字、UDP和TCP套接字编程

    目录 一.网络编程基础 1.1 为什么需要网络编程 1.2 什么是网络编程 1.3 网络编程中的基本概念 二.Socket套接字 2.1 概念 2.2 分类 2.3 Java数据报套接字通信模型 2. ...

  2. Python网络编程2:创建套接字和套接字对象的内建方法

    1.使用socket模块中socket()函数创建套接字: socket()函数返回一个socket对象,该对象的方法实现了各种socket系统调用. 语法: import socket socket ...

  3. 【JavaEE】网络编程基础之Socket套接字

    ✨哈喽,进来的小伙伴们,你们好耶!✨

  4. 网络编程之端口与套接字

    网络编程之端口与套接字 写给将来的自己看,对于其他人不敢保证可读性. 端口 概念与用途 端口是TCP/IP协议簇中,应用层进程与传输层协议实体间的通信接口. 应用层进程通过系统调用与某个端口进行绑定, ...

  5. 《UNIX网络编程 卷1:套接字联网API》学习笔记——基本TCP套接字编程

    UNIX网络编程--基本TCP套接字编程 socket 函数 connect 函数 bind 函数 listen 函数 accept 函数 fork 和 exec 函数 并发服务器 close 函数 ...

  6. JavaEE 网络编程示例1 UDP套接字数据报编程 == 一发一收

    鲁吼呀,胶己人! 文章目录 JavaEE & 网络编程示例1 & UDP套接字数据报编程 ==> 一发一收 1. 协议分层(回顾) 2. 套接字 Socket 2.1 UDP与T ...

  7. 《UNIX网络编程 卷1:套接字联网API(第3版)》——第2章 传输层:TCP、UDP和SCTP 2.1概述...

    本节书摘来自异步社区<UNIX网络编程 卷1:套接字联网API(第3版)>一书中的第2章,第2.1节,作者:[美]W. Richard Stevens , Bill Fenner , An ...

  8. 图灵社区 : 图书 : UNIX网络编程 卷1:套接字联网API(英文版•第3版)

    图灵社区 : 图书 : UNIX网络编程 卷1:套接字联网API(英文版•第3版) 图灵社区 : 图书 : UNIX网络编程 卷1:套接字联网API(英文版•第3版) UNIX网络编程 卷1:套接字联 ...

  9. Python开发基础----异常处理、socket套接字基础1

    异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解 ...

最新文章

  1. tensorflow 模型预训练后的参数restore finetuning
  2. 【UVA624 01背包中的路径问题】
  3. js中cookie操作
  4. 一篇讲Java指令重排和内存可见性的好文
  5. 请使用C#的文件流来拷贝文件
  6. python程序员工作时间_黑马程序员:Python编程之时间和日期模块
  7. 常用类 (一) ----- Arrays数组工具类
  8. 刷掉985/211,年底我却收到字节50W测试开发offer,实名揭露用人标准
  9. Tp5 写随机数(商品货号)
  10. 如何用MATLAB编写FIR维纳滤波器,最佳FIR维纳滤波器实现
  11. 转载:常见的15种音频格式
  12. FPGA,verilog驱动VGA显示
  13. 读书笔记: 《亿级流量网站架构核心技术》(开涛的那本)
  14. 用python做一个随机题目生成器
  15. java技术路线思维导图_开题报告中的研究方法及技术路线指的啥?
  16. .Net 垃圾回收机制原理(一)
  17. ZCMU--5193: 韩信点兵(C语言)
  18. 《人工智能的明天,中国去哪儿》---汤晓鸥
  19. html5几张图片怎么并排一行_html5 图片与文字中间对齐处于同一行、或者图片与按钮处于同一行...
  20. C语言基础——数据运算

热门文章

  1. 前端_JavaScript_Vue
  2. [大数据行业应用发展前景分析] 阿里潘永花报告:大数据产业将成为新的煤和石油介绍...
  3. 一步步创建第一个Docker App —— 4. 部署应用
  4. 13商软 《软件工程》课程设计
  5. 使用faketime修改docker内的时间,解决date: cannot set date: Operation not permitted问题
  6. 解ns方程_流体动力学NS方程的哲学缺陷
  7. 数据结构系统学习(1)数据类型和数据结构的概念
  8. 【熊猫多模式站群开发日志】权限控制拦截器
  9. C#设计模式之15-解释器模式
  10. Sturts2中action各项配置的默认值