socket模块简介

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。socket通常被叫做“套接字”,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。python中socket模块为操作系统的socket实现提供了一个python接口。

socket模块方法及实例

1.socket.socket(family,type)

创建并返回一个新的socket对象,这也是socket最常用的方法。

family参数指的是host的种类:

AF_UNIX:也叫AF_LOCAL,基于本地文件的

AF_NETLINK:这是linux系统支持的一种套接字

AF_INET:这个套接字是基于网络的,对于IPV4协议的TCP和UDP(常用)

AF_INET6:这个套接字是基于网络的,对于IPV6协议的TCP和UDP

type参数指的是套接字类型:

SOCK_STREAM:流套接字,使用TCP socket(常用)

SOCK_DGRAM:数据包问套接字,使用UDP socket(常用)

SOCK_RAW:raw套接字

举例:网络使用ipv4,协议选择tcp连接

>>> import socket

>>> s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

2.s=socket.socket(family,type)的实例方法

(1)s.bind((address,port))

将socket绑定到一个地址和端口上,通常用于socket服务端

address必须是一个双元素元组,((host,port)),主机名或者IP地址+端口号。如果端口号正在被使用或者主机名或IP地址错误,则引发socket.error异常。

端口号的使用是有限制的,在linux或者unix之中只有系统管理员才能使用1024以下的端口,这些端口号用于标准服务。

>>> import socket

>>> s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

>>> s.bind(("172.16.0.183",555))

(2)s.accept()

返回一个客户机socket,带有客户机端的地址信息。

调用accept方法的时候,socket会进入阻塞状态。客户请求连接时,方法建立连接并返回服务器。

accept方法返回一个双元素元组,形如(connection,address)。第一个元素是新的socket对象,第二个元素是客户的IP地址。

当一个连接close之后,可以接着调用accept继续接收从客户端发来的连接请求,因为listen让服务器一直处于监听的状态。

>>> import socket

>>> s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

>>> s.bind(("172.16.0.183",555))

>>> s.listen(10)

>>> connection,address=s.accept()#开启这个之后,socket会进入阻塞状态,并把获取的connection和客户端的ip赋值给前面的变量connection和address

>>> print connection

>>> print address

('172.16.0.183', 21586)

>>>

(3)s.listen(backlog)

将socket设置成监听模式,可以监听backlog外来的连接请求,让服务器开始监听客户端发来的连接请求

这个方法设置服务器为监听状态,backlog制定了最多的连接数,至少为1.接到连接请求后,这些请求必须排队,如果队列达到backlog的数值,则拒绝接下来的连接请求。

>>> import socket

>>> s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

>>> s.bind(("172.16.0.183",555))

>>> s.listen(10)

4)s.connect((address,port))

将socket连接到定义的主机和端口上,通常用于socket客户端

>>> import socket

>>> s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

>>> s.connect(("172.16.0.183"),555)#错误格式

Traceback (most recent call last):

File "", line 1, in

File "C:\Python27\lib\socket.py", line 228, in meth

return getattr(self._sock,name)(*args)

TypeError: connect() takes exactly one argument (2 given)

>>> s.connect(("172.16.0.183",555))

(5)s.recv(buflen[,flags])

从socket中接收数据,最多接收buflen个字符,一般填写1024个

>>> import socket

>>> s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

>>> s.connect(("172.16.0.183",555))

>>> data=s.recv(1024)

(6)s.send(data[,flags])

通过socket发送指定的数据

>>> import socket

>>> s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

>>> s.bind(("172.16.0.183",555))

>>> s.listen(10)

>>> connection,address=s.accept()

>>> print connection

>>> print address

('172.16.0.183', 21586)

>>> s.send('hello,I am lybbn.cn')

Traceback (most recent call last):

File "", line 1, in

socket.error: [Errno 10057] 由于套接字没有连接并且(当使用一个 sendto 调用发送数

据报套接字时)

由上可见,s.send()发送数据的时候需要先建立socket连接,不然会出现error

使用recv方法和send方法发送和接受消息。发送和接收都是采用的字符串的形式。send方法返回已发送的字符个数。调用recv的时候,必须制定一个整数来控制本次调用所接受的最大的数据量。

recv方法接收数据时会进入阻塞状态,最后返回一个字符串,表示收到的数据。如果发送数据超过recv所允许,数据会被截断。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区删除。

(7)s.close()

关闭socket连接

传输结束,通过调用close方法关闭连接

一个简单的socket服务端举例

import socket

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

s.bind(('127.0.0.1',10000))

s.listen(5)

while True:

cs,address=s.accept() #让服务器可以在close之后接收其他客户端的连接请求

print('got connected from'+address)

cs.send('I have got your socket')

data = cs.recv(1024)

cs.close

一个简单的socket客户端举例

import socket

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

s.connect('127.0.0.1',10000)

data=s.recv(1024)

s.send('this is a connection from client')

print('The data received is '+data)

s.close()

python中socket模块常用吗_python中socket模块详解相关推荐

  1. python中if else语句用法_Python If-else语句用法详解

    本文概述 决策是几乎所有编程语言中最重要的方面.顾名思义, 决策制定使我们可以为特定决策运行特定代码块.在此, 将根据特定条件的有效性做出决定.条件检查是决策的基础. 在python中, 决策由以下语 ...

  2. 用python处理excel的基本语法_Python对Excel操作详解

    Python对Excel操作详解 文档摘要: 本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd.xlwt和xlutils模块.另外还演示了如何通过Tcl tco ...

  3. python开发报表系统详细操作流程_python实现报表自动化详解

    本篇文章将介绍: xlwt 常用功能 xlrd 常用功能 xlutils 常用功能 xlwt写Excel时公式的应用 xlwt写入特定目录(路径设置) xlwt Python语言中,写入Excel文件 ...

  4. python可以调用c语言吗_python 调用c语言详解

    python语言调用c语言进行扩展,或者增加程序的运行速度都是特别方便的.同时还能获得与C或者C++几乎相同的执行性能. Python调用C语言的方式 CTYPES, SWIG, BOOST.PYTH ...

  5. python列表的内置方法_Python内置方法详解

    1. 字符串内置方法详解 为何要有字符串?相对于元组.列表等,对于唯一类型的定义,字符串具有最简单的形式. 字符串往往以变量接收,变量名.可以查看所有的字符串的内置方法,如: 1> count: ...

  6. python变量类型是动态的_python内存动态分配过程详解

    一.前言 大多数编译型语言,变量在使用前必须先声明,其中C语言更加苛刻:变量声明必须位于代码块最开始,且在任何其他语句之前.其他语言,想C++和java,允许"随时随地"声明变量, ...

  7. python爬虫代码实例源码_python爬虫及案例详解(附代码)

    安装三大库 1.requests 2.BeautifulSoup 3.lxml 有的网站做了相应的反爬虫,不能用普通方法爬取网站数据. 这里我用python爬取了几个网站的数据,分别存入csv文件,m ...

  8. python中字典的常用函数_python中得字典和常用函数总结

    字典是python中一种常见得数据类型,用{}表示,并且以键值对得形式存放数据. dic={},其中得key键值是不可变得,类型可以是字符串.其中,列表,字典不可以作为键,键值是不可变得.字符串,元组 ...

  9. python中定义函数常用关键字_Python 中定义函数的关键字是 _________________ 。_学小易找答案...

    [其它]实验4-串和数组-实验任务书.docx [填空题]表达式 'abc' in ['abcdefg'] 的值为______________. [填空题]已知 x = range(1,4) 和 y ...

最新文章

  1. iOS11和iPhone X的适配
  2. python 矩形补正方形
  3. python培训比较好的机构-学Python哪个机构好?老男孩Python培训班
  4. C#.NET 中的类型转换 (转)
  5. 删除顺序表指定下标的元素
  6. 【Python】一种超简单的二维列表降维方法
  7. [html] html元素哪些标签是不可替换元素?哪些是可替换元素?
  8. unbuntu cmake安装mysql_ubuntu下编译安装mysql5.5
  9. 虚拟机virtualBox
  10. 电子商务平台的搭建技巧与成功案例资料集
  11. SQL--JOIN之完全用法
  12. 【C++】常用排序算法
  13. 电气工程类中文核心期刊
  14. hello.java_helloworld怎么写java
  15. 2021-05-04 16:37:16.550 ERROR 3268 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] :
  16. 超实用的自我规划模型 | 进击
  17. ESP32分区表图解
  18. 职场学习、员工管理-怎样做企业最受欢迎的员工
  19. 短链接服务的原理和实现
  20. 清华计算机校友郭毅可院士履新,任港科大首席副校长

热门文章

  1. C#LeetCode刷题之#257-二叉树的所有路径(Binary Tree Paths)
  2. C#算法设计排序篇之06-堆排序(附带动画演示程序)
  3. writing avocado tests(写avocado测试用例)
  4. 使用keras进行深度学习_如何在Keras中通过深度学习对蝴蝶进行分类
  5. java解析消息头代码_javaWeb项目-文件下载的消息头和编码问题
  6. U盘数据泄露,用不到30行的Python代码就能盗走
  7. 基于python开发的口罩供需平台
  8. Python matplotlib绘制直方图
  9. Python实现完全二叉树
  10. 深度学习与计算机视觉系列(3)_线性SVM与SoftMax分类器--在深度学习的视觉分类中的,这两个分类器的原理和比较