python socket函数详解
关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确。每次都查半天,经常烦恼于此。索性都弄得清楚、通透,并记录下来,一来便于自己记忆,再者以防日后查阅、回顾。
主要介绍:socket、bind、listen、connect、accept、send、sendto、recv、recvfrom、close、shutdown。
1.socket类型
套接字格式
socket(family,type[,protocal])使用给定的地址族,套接字类型,协议编号(默认为0)来创建套接字
其中:
family指明了协议族/域,通常AF_INET、AF_INET6、AF_LOCAL等;
type是套接口类型,主要是SOCK_STREAM、SOCK_DGRAM、SOCK_RAW;
protocol一般取为0。(默认)与特定的地址家族相关的协议,如果是 0 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议成功时,返回一个小的非负整数值,与文件描述符类似。
创建TCP Socket:
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
创建UDP Socket:
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
2.socket函数
注意:
- TCP发送数据时,已经建立好TCP连接,所以不需要指定的地址,而UDP是面向无连接的,每次发送要指定发送给谁。
- 服务端与客户端不能直接发送列表,元组,字典。需要进行字符串化。
host == ip
服务端socket函数
| 函数 | 描述 |
|---|---|
| s.bind(address) | 将套接字绑定到地址,在AF_INET下,以tuple(host,prot)的方式传入,如s.bind((host,port))。 |
| s.listen(backlog) | 开始监听TCP传入连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值最少为1,大部分应用程序社为5就可以了。 |
| s.accept() | 接受TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据,address是连接客户端的地址。(sock,addr = s.accept)。 |
客户端socket函数
| 函数 | 描述 |
|---|---|
| s.connect(address) | 链接到address处的套接字,一般address的格式为tuple(host,port),如果链接出错,则返回socket.error错误。 |
| s.connect_ex(address) | 功能与s.connect(address)相同,但成功返回0,失败返回errno的值。 |
公共Socket函数
| 函数 | 描述 |
|---|---|
| s.recv(bufsize[,flag]) | 接受TCP套接字的数据,数据以字符串的形式返回,bufsize指定要接收的最大数据量,flag提供有关消息的其它消息,通常可以忽略。 |
| s.recvfrom(bufsize[,flag]) | 接受UDP套接字的数据,与recv()类似,但返回值是tuple(data,address)。其中data是包涵接受数据的字符串,address是发送数据的套接字地址。 |
| s.send(string[,flag]) | 发送TCP数据,将string中的数据发送到连接到套接字,返回值是要发送到字节数量,该数量可能小于string的字节大小。 |
| s.sendall(string[,flag]) | 完整发送TCP数据,将string中的数据发送到链接到套接字,但在返回之前尝试发送所有的数据。成功返回None,失败则抛出异常。 |
| s.sendto(string[,flag],address) | 发送UDP数据,将数据发送到套接字,address形式为tuple(hostadder,port),指定远程地址发送,返回值是发送到字节。 |
| s.close() | 关闭套接字。 |
| s.getpeername() | 返回套接字的远程地址,返回值通常是一个tuple(hostaddr,port)。 |
| s.getsockname() | 返回套接字自己的地址,返回值通常是一个tuple(hostaddr,port)。 |
| s.getsockopt(level,optname[,buflen]]) | 返回套接字选项的值。 |
| s.gettimeout() | 返回当前超时值,单位是秒,如果没有设置超时值则返回None。 |
| s.setsockopt(level, option,value) | 设置给定套接字选项的值 |
| s.settimeout(timeout) | 设置套接字操作的超时时间,timeout是一个浮点数,单位是秒。值为None则表示永远不会超时。一般超时期应在刚创建套接字时设置,因为它们可能用于连接的操作,如s.connect()。 |
| s.setblocking(flag) | 如果flag为0,则将套接字设置为非阻塞模式,否则将套接字设置为阻塞模式(默认值)。非阻塞模式下,如果调用recv()没有发现任何数据,或send()调用无法立即发送数据,那么将引发socket.error异常。 |
| s.makefile() | 创建一个与该套接字相关的文件。 |
| s.fileno() | 返回套接字的文件描述。 |
3.socket编程思路
TCP服务端:
1创建套接字,绑定套接字到本地IP与端口
socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(("0.0.0.0",80000))
2开始监听连接
s.listen()
3进入循环,不断接受客户端的连接请求
s.accept()
4然后接受传来的数据,并发送给对方数据
s.recv() #接收数据
s.sendall() #发送数据
5传输完毕后,关闭套接字
s.close()
TCP客户端
1创建套接字,连接远端地址
socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("127.0.0.1",8000))
2连接后发送数据和接受数据
s.sendall()
s.recv()
3传输完毕后,关闭套接字
s.close()

python socket函数详解的更多相关文章
- windows socket函数详解
windows socket函数详解 近期一直用第三方库写网络编程,反倒是遗忘了网络编程最底层的知识.因而产生了整理Winsock函数库的想法.以下知识点均来源于MSDN,本人只做翻译工作.虽然很多前 ...
- c/c++ socket函数详解
c/c++ socket函数详解 注意: 使用socketAPI前,要先将相关链接库(Ws2_32.lib)加入链接,并使用WSAStartUp函数初始化.每个socket函数都可能失败(返回-1), ...
- 常用socket函数详解
常用socket函数详解 关于socket函数,每个的意义和基本功能都知道,但每次使用都会去百度,参数到底是什么,返回值代表什么意义,就是说用的少,也记得不够精确.每次都查半天,经常烦恼于此.索性都弄 ...
- python --- socket模块详解
socket常用功能函数: socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None) ...
- Socket函数详解
#include <sys/types.h>; #include <sys/socket.h>; --------------------------------------- ...
- php socket函数详解
最近在用socket实现服务端向客户端主动推送消息 函数名 描述 socket_accept() 接受一个Socket连接 socket_bind() 把socket绑定在一个IP地址和端口上 soc ...
- python super()函数详解
引言: 在类的多继承使用场景中,重写父类的方法时,可能会考虑到需要重新调用父类的方法,所以super()函数就是比较使用也很必要的解决方法: 文章来源: http://www.cnblogs.com/ ...
- Python匿名函数详解
python 使用 lambda 来创建匿名函数. lambda这个名称来自于LISP,而LISP则是从lambda calculus(一种符号逻辑形式)取这个名称的. 在Python中,lambda ...
- 04 python之函数详解
一.函数初识 函数的产生:函数就是封装一个功能的代码片段. li = ['spring', 'summer', 'autumn', 'winter'] def function(): count = ...
随机推荐
- html+css快速入门教程(4)
练习 1.网易考拉下拉菜单 2.爱奇艺新闻 3.ps滤镜菜单 4.爱奇艺列表 7 布局 7.1 盒子模型 网页设计,首先要做好整体的布局,网页布局就是将不同的元素按照一定的规则放置在浏览器的不同位置, ...
- MFC中窗口静态分割&视图切换
目录 窗口静态分割 单个分割器 声明 准备视图 静态分割窗口&添加视图 使视图大小随窗口大小改变 多个分割器 声明 静态分割窗口&添加视图 使视图大小随窗口大小改变 视图切换 视图之间 ...
- #Google HTML&CSS规范指南
Google HTML&CSS规范指南 翻译自原文 目录 Google HTML&CSS规范指南 1. 背景 2. 通用 2.1 通用样式规则 2.1.1 协议 2.2 通用格式规则 ...
- 51单片机入门1--与C语言的交接
我们即将进入51单片机的编程学习,咱们今天就来讲解一下单片机中的C语言(你可以称作C51) 在说编程之前,要先说一些别的东西: 二进制,八进制,十六进制 二进制中只有数字0和1,在二进制中1+1为10 ...
- Python数据结构(二)
array固定类型的数据序列,与list类似,只不过成员必须是相同的基本类型 array.typecodes #包含所有可用类型代码的字符串bBuhHiIlLqQfd 输入代码 C型 Python类型 ...
- 浅谈JVM和垃圾回收
写在前面 简单的介绍一下JVM(Java Virtual Machine)吧,它也叫Java虚拟机.虽然它叫虚拟机,但是实际上不是我们所理解的虚拟机,它更像操作系统中的一个进程.JVM屏蔽了各个操作系 ...
- css3 斜切角/斜边的实现方式来自BAT大神的出品
设计图含有斜切角的效果时,我们一般想到的方法是切出四个角为背景,然后用border连起来,这样就能显示出该效果了,那么直接使用css呢?下面就整理css做斜边的效果. 1.方案一:利用linear-g ...
- HTML5(一)初识HTML5
HTML5 简介 HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定. 目的是为了在移动设备上支持多媒体. HTML5 的改进 完全支持 CSS3 Video 和 ...
- (三)ELK logstash input
一,input模块 input 插件官方详解: https://www.elastic.co/guide/en/logstash/current/input-plugins.html Logstash ...
- django 后端分页
分页处理脚本: # -*- coding: utf-8 -*- # @Time : 2019-01-22 10:41 # @Author : 小贰 # @FileName: page.py # @fu ...