python bind sock_python SOCKET编程详细介绍

本章内容

1、socket

2、IO多路复用

3、socketserver

Socket

socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)

基本上,Socket 是任何一种计算机网络通讯中最基础的内容。例如当你在浏览器地址栏中输入 http://www.cnblogs.com/ 时,你会打开一个套接字,然后连接到 http://www.cnblogs.com/ 并读取响应的页面然后然后显示出来。而其他一些聊天客户端如 gtalk 和 skype 也是类似。任何网络通讯都是通过 Socket 来完成的。

Python 官方关于 Socket 的函数请看 http://docs.python.org/library/socket.html

socket和file的区别:

1、file模块是针对某个指定文件进行【打开】【读写】【关闭】

2、socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】

那我们就先来创建一个socket服务端吧

服务端代码

import socket

sk = socket.socket()

sk.bind(("127.0.0.1",8080))

sk.listen(5)

conn,address = sk.accept()

sk.sendall(bytes("Hello world",encoding="utf-8"))

客户端代码

import socket

obj = socket.socket()

obj.connect(("127.0.0.1",8080))

ret = str(obj.recv(1024),encoding="utf-8")

print(ret)

socket更多功能

def bind(self, address): # real signature unknown; restored from __doc__

"""

bind(address)

Bind the socket to a local address.  For IP sockets, the address is a

pair (host, port); the host must refer to the local host. For raw packet

sockets the address is a tuple (ifname, proto [,pkttype [,hatype]])

"""

'''将套接字绑定到本地地址。是一个IP套接字的地址对(主机、端口),主机必须参考本地主机。'''

pass

def close(self): # real signature unknown; restored from __doc__

"""

close()

Close the socket.  It cannot be used after this call.

"""

'''关闭socket'''

pass

def connect(self, address): # real signature unknown; restored from __doc__

"""

connect(address)

Connect the socket to a remote address.  For IP sockets, the address

is a pair (host, port).

"""

'''将套接字连接到远程地址。IP套接字的地址'''

pass

def connect_ex(self, address): # real signature unknown; restored from __doc__

"""

connect_ex(address) -> errno

This is like connect(address), but returns an error code (the errno value)

instead of raising an exception when an error occurs.

"""

pass

def detach(self): # real signature unknown; restored from __doc__

"""

detach()

Close the socket object without closing the underlying file descriptor.

The object cannot be used after this call, but the file descriptor

can be reused for other purposes.  The file descriptor is returned.

"""

'''关闭套接字对象没有关闭底层的文件描述符。'''

pass

def fileno(self): # real signature unknown; restored from __doc__

"""

fileno() -> integer

Return the integer file descriptor of the socket.

"""

'''返回整数的套接字的文件描述符。'''

return 0

def getpeername(self): # real signature unknown; restored from __doc__

"""

getpeername() -> address info

Return the address of the remote endpoint.  For IP sockets, the address

info is a pair (hostaddr, port).

"""

'''返回远程端点的地址。IP套接字的地址'''

pass

def getsockname(self): # real signature unknown; restored from __doc__

"""

getsockname() -> address info

Return the address of the local endpoint.  For IP sockets, the address

info is a pair (hostaddr, port).

"""

'''返回远程端点的地址。IP套接字的地址'''

pass

def getsockopt(self, level, option, buffersize=None): # real signature unknown; restored from __doc__

"""

getsockopt(level, option[, buffersize]) -> value

Get a socket option.  See the Unix manual for level and option.

If a nonzero buffersize argument is given, the return value is a

string of that length; otherwise it is an integer.

"""

'''得到一个套接字选项'''

pass

def gettimeout(self): # real signature unknown; restored from __doc__

"""

gettimeout() -> timeout

Returns the timeout in seconds (float) associated with socket

operations. A timeout of None indicates that timeouts on socket

operations are disabled.

"""

'''返回的超时秒数(浮动)与套接字相关联'''

return timeout

def ioctl(self, cmd, option): # real signature unknown; restored from __doc__

"""

ioctl(cmd, option) -> long

Control the socket with WSAIoctl syscall. Currently supported 'cmd' values are

SIO_RCVALL:  'option' must be one of the socket.RCVALL_* constants.

SIO_KEEPALIVE_VALS:  'option' is a tuple of (onoff, timeout, interval).

"""

return 0

def listen(self, backlog=None): # real signature unknown; restored from __doc__

"""

listen([backlog])

Enable a server to accept connections.  If backlog is specified, it must be

at least 0 (if it is lower, it is set to 0)

注:小编知道大家懒,所以把全部功能的中文标记在每个功能的下面啦。下面撸主列一些经常用到的吧

sk.bind(address)

s.bind(address) 将套接字绑定到地址。address地址的格式取决于地址族。在AF_INET下,以元组(host,port)的形式表示地址。

sk.listen(backlog)

开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。

backlog等于5,表示内核已经接到了连接请求,但服务器还没有调用accept进行处理的连接个数最大为5

这个值不能无限大,因为要在内核中维护连接队列

sk.setblocking(bool)

是否阻塞(默认True),如果设置False,那么accept和recv时一旦无数据,则报错。

sk.accept()

接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。

接收TCP 客户的连接(阻塞式)等待连接的到来

sk.connect(address)

连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。

sk.connect_ex(address)

同上,只不过会有返回值,连接成功时返回 0 ,连接失败时候返回编码,例如:10061

sk.close()

关闭套接字

sk.recv(bufsize[,flag])

接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息,通常可以忽略。

sk.recvfrom(bufsize[.flag])

与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。

sk.send(string[,flag])

将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。即:可能未将指定内容全部发送。

sk.sendall(string[,flag])

将string中的数据发送到连接的套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。

内部通过递归调用send,将所有内容发送出去。

sk.sendto(string[,flag],address)

将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。该函数主要用于UDP协议。

sk.settimeout(timeout)

设置套接字操作的超时期,timeout是一个浮点数,单位是秒。值为None表示没有超时期。一般,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作(如 client 连接最多等待5s )

sk.getpeername()

返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)。

sk.getsockname()

返回套接字自己的地址。通常是一个元组(ipaddr,port)

sk.fileno()

套接字的文件描述符

WEB服务应用:

#!/usr/bin/env python

#coding:utf-8

import socket

def handle_request(client):

buf = client.recv(1024)

client.send("HTTP/1.1 200 OK\r\n\r\n")

client.send("Hello, World")

def main():

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

sock.bind(('localhost',8080))

sock.listen(5)

while True:

connection, address = sock.accept()

handle_request(connection)

connection.close()

if __name__ == '__main__':

main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EPPlus导出Excel感觉很不错~~~

前言导出成为很多系统的必备功能,之前分享过导出PDF的功能,这里来分享一下Excel的导出;提到Excel导出,NPOI肯定是很多小伙伴的首选,在以往的项目中也用其完成了很多导出需求;对于NPOI,个人感觉使…

[文摘]标准的软件开发过程

为什么80%的码农都做不了架构师?>>> 软件开发的标准过程包括六个阶段,而六个阶段需要编写的各类文件达 14 种之多,在每个阶段需要编写哪些文件,以及这些文件的主要内容见下: 1.可行性与计划研究阶段 可行性…

python新闻评论分析_从新闻文章中提取评论

我的问题和这里问的问题类似:https://stackoverflow.com/questions/14599485/news-website-comment-analysis我试图从任何新闻文章中摘录评论。E、 g.我有一个新闻网址:http://www.cnn.com/2013/09/24/politics/un-obama-foreign-policy/我尝试在python中…

走进乔布斯的大脑

全世界有3.14 % 的人已经关注了数据与算法之美你永远也无法走进苹果教父乔布斯神秘的大脑,但下面的图可以让你多靠近了解他一点。人们都想走进乔帮主的大脑里看看他的想法,可惜他太难以捉摸了。但是,有个有趣的方法,至少可以让人们…

如何在没有 System.Drawing.Common 的情况下使用 C# 获取图片格式

之前写过一篇博文,用来获取图片的正确格式。博文所示代码一直工作良好,直到今天在将程序部署到阿里云函数计算时,发生了以下报错:System.Drawing is not supported on this platform.这表明我们不能在阿里云函数计算服务器上使用 …

Ant通配符

我们常用的匹配模式有ANT模式,比如acegi可以用PATTERN_TYPE_APACHE_ANT来使用ANT匹配模式,那什么是ANT匹配模式呢。ANT通配符有三种:通配符 说明 ? 匹配任何单字符 * 匹配0或者任意数量的字符 ** 匹配0或者更多的目录 例子:UR…

java二叉树的深度优先遍历_二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式...

1 packageSolution;23 importjava.util.LinkedList;4 importjava.util.Queue;5 importjava.util.Stack;678 public classBinaryTree {910 //二叉树节点11 public static classBinaryTreeNode {12 intvalue;13 BinaryTreeNode left;14 BinaryTreeNode right;1516 public BinaryT…

NET问答: 如何给 ASP.NET Core 配置指定端口 ?

咨询区 Drew Noakes:我是 ASP.NET Core 方面是新人,我发现程序默认的端口是 5000,因为要正式发布,所以希望把程序的端口改成 80,请问我该如何配置自定义端口呢 ?回答区 Kvin Chalet:在 ASP.NET …

硬货 | 一片小小的薄膜,却可以粘住全世界!

延续“设计激发积极生活”的理念,在这个中秋,GYMLIVING特别推出月亮概念新产品,在便利生活的同时,为你带来一份浪漫和惊喜!说起月亮,除了阴晴圆缺,月球漫步更让它成了浪漫的代名词。有公司正计划…

使用域超级管理员打开Exchange 2010发现没有权限

1.使用administrator管理员打开EMC却报没有权限。 2.发现此问题,系邮件服务器本身上安装了outlook软件,并配置了使用非administrator账户收信。并有做了Windows保存了用户凭据,造成帐号使用上的混乱,导致连接Exchange服务器时使用…

C# 将多个图片合并成TIFF文件的两种方法

最近需要用到TIF格式的文件,研究了一段时间,终于有点结果了,发现两种方式,第一种是使用BitMiracle.LibTiff.NET,直接在Nuget上安装即可,第二种是使用RasterEdge.DocImageSDK,要从官网下载dll包第…

高等数学、线性代数、概率论与数理统计、几何学这些知识可以用来干什么?主要应用有哪些?...

全世界有3.14 % 的人已经关注了数据与算法之美知乎谢漠烟其他三项,不研究少数工科确实没用,但概率统计真乃应用数学之王。鄙人学业从数学院开始,以经济学院结束,现在在证券公司做苦逼行业研究,深有体会。概率统计抛开了…

HDU 2896 病毒侵袭【AC自动机】

Problem Description当太阳的光辉逐渐被月亮遮蔽,世界失去了光明,大地迎来最黑暗的时刻。。。。在这样的时刻,人们却异常兴奋——我们能在有生之年看到500年一遇的世界奇观,那是多么幸福的事儿啊~~但网路上总有那么些网站&#xf…

.NET 中安全高效跨平台的模板引擎 Fluid 使用文档

Liquid 是一门开源的模板语言,由 Shopify 创造并用 Ruby 实现。它是 Shopify 主题的主要构成部分,并且被用于加载店铺系统的动态内容。它是一种安全的模板语言,对于非程序员的受众来说也非常容易理解。Fluid 是一个基于 Liquid 模板语言的开源…

风靡全球的人工智能,如何赶上这班车?

目前,机器学习的使用日渐成为趋势。作为人工智能的核心,机器学习是一门多领域的交叉学科,专门研究计算机模拟或实现人类学习行为的方法,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。简单来说…

java spark读写hdfs_Spark读取HDFS数据输出到不同的文件

最近有一个需求是这样的:原来的数据是存储在MySQL,然后通过Sqoop将MySQL的数据抽取到了HDFS集群上,抽取到HDFS上的数据都是纯数据,字段值之间以\t分隔,现在需要将这部分数据还原为json格式的,因为这样做的原…

15个创意的电梯广告

如果你走进任何一个城市,几乎每一个地方有电梯,但是你发现具有创意的广告电梯了吗,分享给大家15个不同城市的创意的电梯广告,作为设计师可以帮助你 Accor Air Asia Becel Body World Coke Zero Consol Energy Fiat Punto Forklift…

揭秘全球开发最新趋势!JS开发者达1380万,C#超越PHP,Rust增长最快

文 | 白开水出品 | OSC开源社区(ID:oschina2013)研究公司 SlashData 最新发布的”State of the Developer Nation“第 20 版报告指出,全球开发者社区在过去六个月中的经历了巨大的增长。据估计,截至 2021 年第一季度&a…

怎样判断漂亮女孩是不是单身的?

全世界有3.14 % 的人已经关注了数据与算法之美不解风情的死理性派们在情感生活中不免会遇到这样悲催的一幕:偶然间遇到一位心仪的漂亮女孩,从此日思夜想,废寝忘食,开始了漫长的暗恋之旅。等到一日,在无尽的纠结中&…

java开源cad_寻找 AutoCAD 替代品,5款免费开源 CAD 软件推荐

FreeCADFreeCAD 是一种通用的3D CAD建模。完全开源(LGPL许可证)FreeCAD 直接的目的是在机械工程和产品设计,也适合在更广泛的用途,如建筑行业或其他工程专业,工程相关领域。FreeCAD 全平台通用,能完美工作在 Windows、Linux 和 ma…