Python网络编程(Socket)

Python提供了两个访问级别的网络服务。在一个较低的水平,您可以访问底层操作系统的基本套接字支持,允许你实现面向连接和无连接协议的客户端和服务器
Python有特定的应用程序级的网络协议,如FTP,HTTP等,提供更高级别的访问的库。

本教程为您提供最有名的网络概念的理解 - Socket编程

什么是套接字(Sockets)?

套接字是一个双向的通信信道的端点。套接字可能在沟通过程,进程之间在同一台机器上,或在不同的计算机之间的进程.

套接字可以实现通过不同渠道类型的号码:Unix域套接字的TCP,UDP等等。套接字库提供处理处理,共同传输,以及一个通用的接口的具体类.

套接字有自身词汇表:

Term Description
domain The family of protocols that will be used as the transport mechanism. These values are constants such as AF_INET, PF_INET, PF_UNIX, PF_X25, and so on.
type The type of communications between the two endpoints, typically SOCK_STREAM for connection-oriented protocols and SOCK_DGRAM for connectionless protocols.
protocol Typically zero, this may be used to identify a variant of a protocol within a domain and type.
hostname The identifier of a network interface:

  • A string, which can be a host name, a dotted-quad address, or an IPV6 address in colon (and possibly dot) notation
  • A string "", which specifies an INADDR_BROADCAST address.
  • A zero-length string, which specifies INADDR_ANY, or
  • An Integer, interpreted as a binary address in host byte order.
port Each server listens for clients calling on one or more ports. A port may be a Fixnum port number, a string containing a port number, or the name of a service.

socket 模块:

要创建一个套接字,你必须使用socket.socket()函数,它在socket模块,其中有一般的语法:

s = socket.socket (socket_family, socket_type, protocol=0)

下面是参数的描述:

  • socket_family: 这是AF_UNIX或AF_INET,正如我刚才解释.

  • socket_type: 这是SOCK_STREAM,或为SOCK_DGRAM.

  • protocol: 这通常被不用关心,默认为0.

一旦你有套接字对象,那么你可以使用所需的功能来创建你的客户端或服务器程序。以下是所需的功能列表:

服务器 Socket 方法:

Method Description
s.bind() This method binds address (hostname, port number pair) to socket.
s.listen() This method sets up and start TCP listener.
s.accept() This passively accept TCP client connection, waiting until connection arrives (blocking).

客户端Socket 方法:

Method Description
s.connect() This method actively initiates TCP server connection.

一般Socket 方法:

Method Description
s.recv() This method receives TCP message
s.send() This method transmits TCP message
s.recvfrom() This method receives UDP message
s.sendto() This method transmits UDP message
s.close() This method closes socket
socket.gethostname() Returns the hostname.

一个简单的服务器:

写一个互联网服务器,我们使用的socket模块插座功能可用来创建一个socket对象。一个Socket对象,然后用来调用其他函数来设置套接字服务器.

现在调用bind(主机名,端口)函数,给定主机上的一个端口指定为您服务.

接下来,调用的accept方法返回的对象。这种方法等待,直到一个客户端连接到您指定的端口,然后返回一个连接对象,表示客户端的连接.

#!/usr/bin/python           # This is server.py fileimport socket               # Import socket modules = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.bind((host, port))        # Bind to the ports.listen(5)                 # Now wait for client connection.
while True:c, addr = s.accept()     # Establish connection with client.print 'Got connection from', addrc.send('Thank you for connecting')c.close()                # Close the connection

一个简单的客户端:

现在我们将编写一个非常简单的客户端程序,这将打开一个连接到一个特定的端口12345和给定的主机。这是非常简单的创建一个socket客户端使用Python的socket模块功能.

socket.connect(主机名或IP, 端口)打开到主机上的TCP端口的连接.

一旦你打开一个套接字,你可以看到它像任何IO对象。当完成后,记得要关闭它,你会关闭文件。
下面的代码是一个非常简单的客户端连接到一个特定的主机和端口,读取从套接字任何可用的数据,然后退出:

#!/usr/bin/python           # This is client.py fileimport socket               # Import socket modules = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.s.connect((host, port))
print s.recv(1024)
s.close                     # Close the socket when done

现在运行这个背景server.py,然后运行以上client.py看到的结果.

# Following would start a server in background.
$ python server.py & # Once server is started run client as follows:$ python client.py

这将产生以下结果:

Got connection from ('127.0.0.1', 48437)
Thank you for connecting

Python网络模块

可以使用Python中的网络/互联网编程的一些重要的模块列表.

Protocol Common function Port No Python module
HTTP Web pages 80 httplib, urllib, xmlrpclib
NNTP Usenet news 119 nntplib
FTP File transfers 20 ftplib, urllib
SMTP Sending email 25 smtplib
POP3 Fetching email 110 poplib
IMAP4 Fetching email 143 imaplib
Telnet Command lines 23 telnetlib
Gopher Document transfers 70 gopherlib, urllib

请查看上面提到所有库的合作与FTP,SMTP的POP,IMAP协议.

进阶阅读资料:

我已经给你一个Socket编程的快速启动。这是一个大课题,因此建议通过下面的链接去寻找更详细:

  • Unix Socket Programming.

  • Python Socket Library and Modules.

Python网络编程(Socket)相关推荐

  1. 树莓派 Python 网络编程 (Socket入门)

    树莓派  Python 网络编程 (Socket入门) 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络 ...

  2. python网络编程--socket简单实现

    python网络编程                                                                                           ...

  3. Python网络编程socket

    网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...

  4. python网络编程-socket编程

    一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层模 ...

  5. python网络编程—Socket

    一.Socket是什么? socket:简称套接字,是进程间通讯的一种方式,他与其他进程间通讯的一个主要不同是:它能实现不同主机间进程间通讯,我们网络上各种各样的服务大多是基于Socket来完成通讯的 ...

  6. python 网络编程--socket模块/struct模块

    socket模块: 客户端:CS架构,  client -> server 浏览器:BS架构,  browser -> server 网络通信本质:传输字节 doc命令查看ip地址:ipc ...

  7. Day8 - Python网络编程 Socket编程 --转自金角大王

    本节内容: Socket语法及相关 SocketServer实现多并发 Socket语法及相关 socket概念 socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实 ...

  8. python 网络编程 socket 报错 ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。

    服务端: # -*- coding: utf-8 -*- """ @File : 191226_基于UDP协议的socket_server端.py @Time : 201 ...

  9. Python网络编程——socket套接字实现UDP/TCP信息传输

    socket套接字 socket(简称 套接字) ,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来 ...

最新文章

  1. 物理IP和浮动IP分别的含义是什么
  2. v-model详细使用
  3. 《每日一题》49. Group Anagrams 字母异位词分组
  4. 酸了!第一名+第三名的学霸情侣,分别直博清华、人大…
  5. linux获取ip地址的接口,获取Linux上接口的IP地址
  6. 因循守旧最好:都是CPU架构,为什么你叫sw_64,而不是sw64?多别扭啊
  7. Android开发(一)
  8. 用Python实现简单的服务器【新手必学】
  9. 联想计算机的控制面板在哪,教程知识:联想win10控制面板在哪里打开
  10. ROS创建Web代理(Web proxy)
  11. python 四象限图_方法:高效处理工作的四象限图
  12. 超全,整理了18种常用数据分析模型和方法
  13. 数据仓库 Hive 从入门到小牛(一)
  14. 一键使 WIN 10进入休眠、睡眠、关机的命令
  15. 苏嵌//张朋//2018.07.16
  16. linux+zip+加密+无交互,Linux下zip加密压缩
  17. 免信任型计算的扩容模型
  18. ios各种手势,很有意思
  19. 刘润:进化的力量年度演讲全文图解
  20. 从概念AI到普惠AI:走遍中国的华为云在忙什么?

热门文章

  1. 如何区别***工具与病毒
  2. nodejs操作mysql查询返回的数据_nodejs连接mysql进行数据库查询返回前台数据的坑...
  3. Java学习系列(十三)Java面向对象之界面编程
  4. PHP判断用户是否登录
  5. Mybatis, 实现一对多
  6. Reactjs不能忽略的key
  7. 源码安装php时出现configure: error: xml2-config not found. Please check your libxml2 installation...
  8. 数据转换成json传递
  9. CSS浏览器兼容问题
  10. Settings点击Location(位置)后右上角的开关button不会消失