socket通常也称作”套接字“。网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。socket 是网络连接端点。例如当你的Web浏览器请求www.fishc.com上的主页时,你的Web浏览器创建一个socket并命令它去连接 www.fishc.com的Web服务器主机,Web服务器也对来自的请求在一个socket上进行监听。两端使用各自的socket来发送和 接收信息。
socket模块提供了几个函数用于使用主机名和地址来工作:         gethostname() 返回运行程序所在的计算机的主机名:

  1. #>>> import socket
  2. #>>> socket.gethostname()
  3. #'李嘉图的计算机'
  4. #>>>

复制代码

gethostbyname(name) 尝试将给定的主机名解释为一个IP地址

  1. #>>> #socket.gethostbyname('www.fishc.com')
  2. #'101.37.44.185'
  3. #>>> socket.gethostbyname('李嘉图的计算机')
  4. #'192.168.1.104'
  5. #>>>

复制代码

ps:首先将检查当前计算机是否能够解释。如果不能,一个解释请求将发送给一个远程的DNS服务器(远程的DNS服务器 还可能将解释请求转发给另一个DNS服务器,直到该请求可以被处理)。gethostbyname函数返回这个IP地址或在查找失败后引发一个异常。         拓展;         gethostbyname_ex(name)返回一个包含三个元素的元组 :         (给定地址的主要的主机名,同一IP地址的可选的主机名的一个列,同一主机的同一接口的其它IP地址的一个列表)

  1. >>> #>>>socket.gethostbyname_ex('www.fishc.com')
  2. #('bbgaws7ldwotai4akucb7ckfsnvzoz6m.aliyunwaf.com', ['www.fishc.com'], ['101.37.44.185'])

复制代码

gethostbyaddr(address)函数的作用与gethostbyname_ex相同,只是你提供给它的参数是一个IP地址字符串
        getservbyname(service,protocol)函数要求一个服务名(如'telnet'或'ftp')和一个协议(如'tcp'或'udp'),返回服务所使用的端口号:

  1. #>>>socket.getservbyname('http','tcp')
  2. #80
  3. #>>>socket.getservbyname('telnet','tcp)
  4. #23

复制代码

socket通信         import socket
        1. socket()

  1. socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)

复制代码

(1)family = AF_INET表示服务器之间的通信。
       
        (2)fmily = AF_UNIX表示Unix不同进程间的通信。
       
        (3)type = SOCK_STREAM表示TCP连接。
       
        (4)type = SOCK_DGRAM 表示UDP连接。

ps: 2, 3, 4 方法用于服务端         2. bind()
        sk.bind(address)
        将地址与socket绑定。address(host IP,端口号),address必须是个元组。

3. listen()
        listen(backlog)
        监听客户端的连接。backlog为可选参数,表示最大等待连接数量。

4.accept()
        接受连接并返回(conn,address)。其中conn表示客户端的sk对象,        
        示例:

  1. sk = socket.socket()
  2. address = ('127.0.0.1',9080)
  3. sk.bind(address)
  4. sk.listen(5)
  5. conn,addr = sk.accept()
  6. print(sk)
  7. print(conn)
  8. print(addr)
  9. 输出结果:
  10. <socket.socket fd=3, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9080)>
  11. <socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9080), raddr=('127.0.0.1', 35066)>
  12. ('127.0.0.1', 35066)

复制代码

5.recv()
        sk.recv(bufsize)
        接收数据。其中bufsize表示最大可接收的数据大小。

6.connect()
        sk.connect(address)
        连接指定地址的socket。address用元组表示。

7.send()
        sk.send(data)
        将data发送给连接的socket。

8.sendall()
        与send类似,内部通过递归调用send()方法,尝试将所有数据发送出去。
        9.sendto()
        sk.sendto(data,addr)         可指定远端地址

notice!         TCP(SOCK_STREAM),需要连接到远程主机才可以发送数据,发送数据用send(b'字符')         UDP(SOCK_DGRAM),不需要连接,直接发送数据,发送数据用sendto(b'字符',(ip,port))        
        10.settimeout(timeout)
        设置超时。

11.getpeername()
        返回远端socket的地址(address,port)。

12.getsockname()
        返回自己的socket地址(address,port)。

13.fileno()
        套接字的文件描述符。

示例:         利用socket模块进行通信         服务端:

  1. sk = socket.socket()
  2. address = ('127.0.0.1',9080)
  3. sk.bind(address)
  4. sk.listen(5)
  5. conn,addr = sk.accept()
  6. data = conn.recv(1024)
  7. print(str(data,'utf8'))

复制代码

客户端:

  1. sk = socket.socket()
  2. address = ('127.0.0.1',9080)
  3. sk.connect(address)
  4. inp = input('>>')
  5. sk.send(bytes(inp,'utf8'))

复制代码

python标准库之【socket】的更多相关文章

  1. (转)python标准库中socket模块详解

    python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...

  2. python标准库中socket模块详解

    包含原理就是tcp的三次握手 http://www.lybbn.cn/data/datas.php?yw=71 这篇讲到了socket和django的联系 https://www.cnblogs.co ...

  3. python标准库 - socket

    地址簇(address family) socket.AF_UNIX # (UNIX Domain Sockets) socket.AF_INET # ipv4 socket.AF_INET6 # i ...

  4. python标准库00 学习准备

    Python标准库----走马观花 python有一套很有用的标准库.标准库会随着python解释器一起安装在你的电脑上的.它是python的一个组成部分.这些标准库是python为你准备的利器,可以 ...

  5. Python标准库的学习准备

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python标准库是Python强大的动力所在,我们已经在前文中有所介绍.由于标准 ...

  6. Python标准库——走马观花

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python有一套很有用的标准库(standard library).标准库会随着 ...

  7. Python 标准库 urllib2 的使用细节[转]

    转自[http://zhuoqiang.me/python-urllib2-usage.html] Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比 ...

  8. Python 标准库 urllib2 的使用细节

    刚好用到,这篇文章写得不错,转过来收藏.    转载自 道可道 | Python 标准库 urllib2 的使用细节 Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节 ...

  9. Python 标准库 urllib2 的使用细节(转)

    http://www.cnblogs.com/yuxc/archive/2011/08/01/2123995.html http://blog.csdn.net/wklken/article/deta ...

  10. python第六天 函数 python标准库实例大全

    今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...

随机推荐

  1. android中dip、dp、px、sp和屏幕密度

    1. dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这    这个 ...

  2. php下载大文件

    <?php $file = @ fopen($file_dir . $file_name,"r"); $filesize=filesize($file_dir.$file_n ...

  3. 子字符串substring 问题 - KMP 字符串匹配算法备忘录

    本文为自己对KMP的理解. 对KMP很好的介绍可以参考 http://www.cnblogs.com/yjiyjige/p/3263858.html 本文为对这篇文章的提炼和补充. KMP算法基本思想 ...

  4. 如何查看由EF生成的SQL?

    如下: query = from c in query group c by c.Id into cGroup orderby cGroup.Key select cGroup.FirstOrDefa ...

  5. javascript拖拽原理与简单实现方法[demo]

    美国人有一句常用的俗语—“Re-inventing the Wheel”,从字面上来解释就是“重新发明轮子”.可是轮子早已问世,再要去发明岂非劳而无功? 产品经理发下需求,实施者再到网上搜索代码,也许 ...

  6. Item 11 谨慎地覆盖Clone

    1.进行浅拷贝时,只是复制原始数据类型的值,则可以通过覆盖Clone方法来达到.另外,在进行浅拷贝的时候,还要注意,成员对象中不应该要有引用类型,如果有引用类型,那么,进行了浅拷贝之后,两个对象将会共 ...

  7. ZOJ3874 Permutation Graph

    Time Limit: 2 Seconds      Memory Limit: 65536 KB Edward has a permutation {a1, a2, … an}. He finds ...

  8. [Unity]用PropertyDrawer自定义struct/class的外观

    一般来说,当我们要扩展编辑器时,我们会从Editor类继承,为自己的MonoBehaviour实现不同的外观. 但是如果有一个struct/class,在许多地方被使用,Unity默认的外观又不够好看 ...

  9. python初步学习-查看文档及数据类型转换

    学会查看文档 python最权威的文档就是官方文档,因此,我们要学会查看官方文档.而在python解释器中,help() 命令就可以很权威的查看官方文档. 因此,我们要学会使用 help() 命令. ...

  10. 【HNOI】五彩斑斓 模拟

    [题目描述] 给定一个n*m的矩阵,矩阵的某些位置有一个颜色(可以没有颜色,即为0),现在你可以将矩阵的某一行或者某一列染成同一种颜色,问最少用多少步能达到目标矩阵的染色方案,输出最少步数和方案. [ ...