一台计算机有65536个TCP端口和65536个UDP端口,一个端口只能被一个进程占用,1024以下端口是标准端口,固定分配,比如ftp就是21端口ssh是22端口telnet是23端口smtp是25端口等

网络通信其实是网络进程间的通信IP(主机)+PORT(进程)

Socket 类型

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

socket 类型 描述
socket.AF_UNIX 用于同一台机器上的进程通信(既本机通信)
socket.AF_INET 用于服务器与服务器之间的网络通信
socket.AF_INET6 基于IPV6方式的服务器与服务器之间的网络通信
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是面向无连接的,每次发送都需要指定发送给谁。
  • 服务器与客户端不能直接发送列表,元素,字典等带有数据类型的格式,发送的内容必须是字符串数据。

服务器端 Socket 函数

Socket 函数 描述
s.bind(address) 将套接字绑定到地址,在AF_INET下,以tuple(host, port)的方式传入,如s.bind((host, port))
s.listen(backlog) 开始监听TCP传入连接,backlog指定在拒绝链接前,操作系统可以挂起的最大连接数,该值最少为1,大部分应用程序设为5就够用了
s.accpet() 接受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.recv(bufsize[, flag]) 接受TCP套接字的数据,数据以字符串形式返回,buffsize指定要接受的最大数据量,flag提供有关消息的其他信息,通常可以忽略
s.send(string[, flag]) 发送TCP数据,将字符串中的数据发送到链接的套接字,返回值是要发送的字节数量,该数量可能小于string的字节大小
s.sendall(string[, flag]) 完整发送TCP数据,将字符串中的数据发送到链接的套接字,但在返回之前尝试发送所有数据。成功返回None,失败则抛出异常
s.recvfrom(bufsize[, flag]) 接受UDP套接字的数据u,与recv()类似,但返回值是tuple(data, address)。其中data是包含接受数据的字符串,address是发送数据的套接字地址
s.sendto(string[, flag], address) 发送UDP数据,将数据发送到套接字,address形式为tuple(ipaddr, port),指定远程地址发送,返回值是发送的字节数
s.close() 关闭套接字
s.getpeername() 返回套接字的远程地址,返回值通常是一个tuple(ipaddr, port)
s.getsockname() 返回套接字自己的地址,返回值通常是一个tuple(ipaddr, port)
s.setsockopt(level, optname, value) 设置给定套接字选项的值
s.getsockopt(level, optname[, buflen]) 返回套接字选项的值
s.settimeout(timeout) 设置套接字操作的超时时间,timeout是一个浮点数,单位是秒,值为None则表示永远不会超时。一般超时期应在刚创建套接字时设置,因为他们可能用于连接的操作,如s.connect()
s.gettimeout() 返回当前超时值,单位是秒,如果没有设置超时则返回None
s.fileno() 返回套接字的文件描述
s.setblocking(flag) 如果flag为0,则将套接字设置为非阻塞模式,否则将套接字设置为阻塞模式(默认值)。非阻塞模式下,如果调用recv()没有发现任何数据,或send()调用无法立即发送数据,那么将引起socket.error异常。
s.makefile() 创建一个与该套接字相关的文件

参考:1、官方文档 https://docs.python.org/2/library/socket.html

     2、https://gist.github.com/shengulong/894fdc04c5972b9de9c8813e42725f07

   3、https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832511628f1fe2c65534a46aa86b8e654b6d3567c000

     4、http://www.jianshu.com/p/e062b3dd110c

转载于:https://www.cnblogs.com/shengulong/p/7194269.html

python的socket相关推荐

  1. Python局域网socket无法连接的问题解决

    Python局域网socket无法连接的问题解决 服务器端的socket监听的是否是服务器的IP地址(并不是什么'localhost'或者'127.0.0.1'这种).即客户端需要连接的IP地址填入即 ...

  2. python的socket编程_Python Socket编程详细介绍

    在使用Python做socket编程时,由于需要使用阻塞(默认)的方式来读取数据流,此时对于数据的结束每次都需要自己处理,太麻烦.并且网上也没找到太好的封装,所以就自己写了个简单的封装. 封装思路 1 ...

  3. Python 技术篇-socket套接字实现两个窗口间消息传递实例演示,TCP实现

    上一篇:Python 技术篇-socket 套接字实现服务器客户端消息传递,UDP 实现 本篇介绍用 TCP 来实现. socket 实现客户端服务器的消息传递有 TCP 和 UDP 两种方式. TC ...

  4. Python 技术篇-socket套接字实现服务器客户端消息传递实例演示,UDP实现

    上一篇:Python 技术篇-socket 套接字实现两个窗口间消息传递,TCP 实现 本篇介绍用 UDP 来实现. socket 套接字实现服务器客户端消息传递有 UDP 和 TCP 两种形式.他们 ...

  5. 「Python」socket指南

    开始 网络中的 Socket 和 Socket API 是用来跨网络的消息传送的,它提供了 进程间通信(IPC) 的一种形式.网络可以是逻辑的.本地的电脑网络,或者是可以物理连接到外网的网络,并且可以 ...

  6. Python: Socket网络编程,多线程处理小Demo

    一个简单的例子,深入研究一下socket的多线程处理任务 Server端: #!/usr/bin/env python #encoding:utf8 # # 注意:定义encoding时必须在第二行i ...

  7. 用python做双人五子棋_基于python的socket实现单机五子棋到双人对战

    基于python的socket实现单机五子棋到双人对战,供大家参考,具体内容如下 本次实验使用python语言.通过socket进行不同机器见的通信,具体可以分为以下四步:1.创建ServerSock ...

  8. python调用库实现返回ping的时延_python网络作业:使用python的socket库实现ICMP协议的ping...

    ICMP ping是您遇到过的最常见的网络扫描类型. 打开命令行提示符或终端并输入ping www.google.com非常容易. 为什么要在python中实现? 很多名牌大学喜欢考试用python的 ...

  9. python socket编程_最基础的Python的socket编程入门教程

    本文介绍使用Python进行Socket网络编程,假设读者已经具备了基本的网络编程知识和Python的基本语法知识,本文中的代码如果没有说明则都是运行在Python 3.4下. Python的sock ...

  10. python的socket连接不上_Python套接字只允许一个连接,但在新的连接上断开,而不是拒绝...

    我不确定我完全理解你的问题,但我认为下面的例子可以满足你的要求.服务器可以断开旧用户的连接,为新用户提供服务.在 服务器端:#!/usr/bin/env python import socket im ...

最新文章

  1. mysql model first,一个支持 CodeFirst/DbFirst/ModelFirst 的数据库小工具
  2. python在列表末尾删除一个_从链接列表的尾部移除(Python)
  3. java学绘图吗_Java绘图
  4. gdb调试常用命令速查(段错误调试)
  5. 在Ubuntu下安装jdk解压出现问题:./jdk-6u30-linux-i586.bin: 113: ./install.sfx.3631: not found
  6. 专题导读:新基建环境下的数据资产价值评估与定价
  7. 12月10日习题答案大剖析!小伙伴们再接再厉
  8. IAR EW8051-8.10.4安装及破解方法
  9. linux常用命令示例
  10. C# 图片预览打印方法
  11. Hackintool 3.4.7中文版 (黑苹果必备工具箱神器)
  12. Hadoop原理讲解(面试题)
  13. 电容倍增器作为电源滤波器
  14. 服务器备份应该怎么做
  15. 计算机毕业设计Java诚越园区垃圾分类信息科普系统(源码+系统+mysql数据库+lw文档)
  16. 基础数论算法(4) 中国剩余定理
  17. 当Sklearn遇上Plotly,机器学习变得如此简单、易于理解
  18. SpringCloud微服务项目实战 - 6.延迟任务
  19. 1588时钟同步算法仿真matlab,基于卡尔曼滤波与PID控制的IEEE1588从时钟同步研究
  20. 阅读QA论文中遇到的一些问题

热门文章

  1. oc 管理工具 黑苹果 下载_灵越7590黑苹果(win10下)
  2. vscode 管理员权限 运行终端
  3. 『TensorFlow』pad图片
  4. 用Python解矩阵方程——Numpy模块
  5. PS_一寸照片换背景底色
  6. 服务器邮箱验证失败是什么意思,发送邮件时,提示“邮件发送失败:SMTP验证失败”?...
  7. 简单 Python 快乐之旅之:Python 基础语法之 JSON 专题
  8. 基于 EG6831 的无感 BLDC 控制方案
  9. vue3+element plus下面,自定义el-table表格标题
  10. HTML点击图片播放音乐