Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >sock基础编程介绍

sock基础编程介绍

作者头像
超蛋lhy
发布于 2018-08-31 08:17:51
发布于 2018-08-31 08:17:51
1.2K0
举报
文章被收录于专栏:PythonistaPythonista

一个简单的python socket编程

一、套接字 套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。它们允许程序接受并进行连接,如发送和接受数据。为了建立通信通道,网络通信的每个端点拥有一个套接字对象极为重要。 套接字为BSD UNIX系统核心的一部分,而且他们也被许多其他类似UNIX的操作系统包括Linux所采纳。许多非BSD UNIX系统(如ms-dos,windows,os/2,mac os及大部分主机环境)都以库形式提供对套接字的支持。 三种最流行的套接字类型是:stream,datagram和raw。stream和datagram套接字可以直接与TCP协议进行接口,而raw套接字则接口到IP协议。但套接字并不限于TCP/IP。 二、套接字模块 套接字模块是一个非常简单的基于对象的接口,它提供对低层BSD套接字样式网络的访问。使用该模块可以实现客户机和服务器套接字。要在python 中建立具有TCP和流套接字的简单服务器,需要使用socket模块。利用该模块包含的函数和类定义,可生成通过网络通信的程序。一般来说,建立服务器连接需要六个步骤。 第1步是创建socket对象。调用socket构造函数。 socket=socket.socket(familly,type) family的值可以是AF_UNIX(Unix域,用于同一台机器上的进程间通讯),也可以是AF_INET(对于IPV4协议的TCP和 UDP),至于type参数,SOCK_STREAM(流套接字)或者 SOCK_DGRAM(数据报文套接字),SOCK_RAW(raw套接字)。 第2步则是将socket绑定(指派)到指定地址上,socket.bind(address) address必须是一个双元素元组,((host,port)),主机名或者ip地址+端口号。如果端口号正在被使用或者保留,或者主机名或ip地址错误,则引发socke.error异常。 第3步,绑定后,必须准备好套接字,以便接受连接请求。 socket.listen(backlog) backlog指定了最多连接数,至少为1,接到连接请求后,这些请求必须排队,如果队列已满,则拒绝请求。 第4步,服务器套接字通过socket的accept方法等待客户请求一个连接: connection,address=socket.accept() 调用accept方法时,socket会进入'waiting'(或阻塞)状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有俩个元素的元组,形如(connection,address)。第一个元素(connection)是新的socket对象,服务器通过它与客户通信;第二个元素(address)是客户的internet地址。 第5步是处理阶段,服务器和客户通过send和recv方法通信(传输数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数。服务器使用recv方法从客户接受信息。调用recv时,必须指定一个整数来控制本次调用所接受的最大数据量。recv方法在接受数据时会进入'blocket'状态,最后返回一个字符串,用它来表示收到的数据。如果发送的量超过recv所允许,数据会被截断。多余的数据将缓冲于接受端。以后调用recv时,多余的数据会从缓冲区删除。 第6步,传输结束,服务器调用socket的close方法以关闭连接。 建立一个简单客户连接则需要4个步骤。 第1步,创建一个socket以连接服务器 socket=socket.socket(family,type) 第2步,使用socket的connect方法连接服务器 socket.connect((host,port)) 第3步,客户和服务器通过send和recv方法通信。 第4步,结束后,客户通过调用socket的close方法来关闭连接。

python 编写server的步骤: 第一步是创建socket对象。调用socket构造函数。如: socket = socket.socket( family, type ) family参数代表地址家族,可为AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用于同一台机器上的进程间通信。 type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。 第二步是将socket绑定到指定地址。这是通过socket对象的bind方法来实现的: socket.bind( address ) 由AF_INET所创建的套接字,address地址必须是一个双元素元组,格式是(host,port)。host代表主机,port代表端口号。如果端口号正在使用、主机名不正确或端口已被保留,bind方法将引发socket.error异常。 第三步是使用socket套接字的listen方法接收连接请求。 socket.listen( backlog ) backlog指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求。 第四步是服务器套接字通过socket的accept方法等待客户请求一个连接。 connection, address = socket.accept() 调 用accept方法时,socket会时入“waiting”状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有两个元素的 元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。 第五步是处理阶段,服务器和客户端通过send和recv方法通信(传输 数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数。服务器使用recv方法从客户接收信息。调用recv 时,服务器必须指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。recv方法在接收数据时会进入“blocked”状态,最后返回一个字符 串,用它表示收到的数据。如果发送的数据量超过了recv所允许的,数据会被截短。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区 删除(以及自上次调用recv以来,客户可能发送的其它任何数据)。 传输结束,服务器调用socket的close方法关闭连接。 python编写client的步骤: 创建一个socket以连接服务器:socket = socket.socket( family, type ) 使用socket的connect方法连接服务器。对于AF_INET家族,连接格式如下: socket.connect( (host,port) ) host代表服务器主机名或IP,port代表服务器进程所绑定的端口号。如连接成功,客户就可通过套接字与服务器通信,如果连接失败,会引发socket.error异常。 处理阶段,客户和服务器将通过send方法和recv方法通信。 传输结束,客户通过调用socket的close方法关闭连接。 下面给个简单的例子: server.py python 代码 if __name__ == '__main__': import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost', 8001)) sock.listen(5) while True: connection,address = sock.accept() try: connection.settimeout(5) buf = connection.recv(1024) if buf == '1': connection.send('welcome to server!') else: connection.send('please go out!') except socket.timeout: print 'time out' connection.close() client.py python 代码 if __name__ == '__main__': import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('localhost', 8001)) import time time.sleep(2) sock.send('1') print sock.recv(1024) sock.close()

在终端运行server.py,然后运行clien.py,会在终端打印“welcome to server!"。如果更改client.py的sock.send('1')为其它值在终端会打印”please go out!“,更改time.sleep(2)为大于5的数值, 服务器将会超时。

举例:

服务端: #socket server端 #获取socket构造及常量 from socket import * #''代表服务器为localhost myHost = '' #在一个非保留端口号上进行监听 myPort = 50007 #设置一个TCP socket对象 sockobj = socket(AF_INET, SOCK_STREAM) #绑定它至端口号 sockobj.bind((myHost, myPort)) #监听,允许5个连结 sockobj.listen(5) #直到进程结束时才结束循环 while True:     #等待下一个客户端连结     connection, address = sockobj.accept( )     #连结是一个新的socket     print 'Server connected by', address     while True:         #读取客户端套接字的下一行         data = connection.recv(1024)         #如果没有数量的话,那么跳出循环         if not data: break         #发送一个回复至客户端         connection.send('Echo=>' + data)     #当socket关闭时eof     connection.close( ) 客户端: import sys from socket import * serverHost = 'localhost' serverPort = 50007 #发送至服务端的默认文本 message = ['Hello network world'] #如果参数大于1的话,连结的服务端为第一个参数 if len(sys.argv) > 1:     serverHost = sys.argv[1]     #如果参数大于2的话,连结的文字为第二个参数     if len(sys.argv) > 2:         message = sys.argv[2:] #建立一个tcp/ip套接字对象 sockobj = socket(AF_INET, SOCK_STREAM) #连结至服务器及端口 sockobj.connect((serverHost, serverPort)) for line in message:     #经过套按字发送line至服务端     sockobj.send(line)     #从服务端接收到的数据,上限为1k     data = sockobj.recv(1024)     #确认他是引用的,是'x'     print 'Client received:', repr(data) #关闭套接字 sockobj.close( )

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-05-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python socket
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。所以在进行TCP链接时首先要开启服务器端口。
py3study
2020/01/19
5580
Python 一个简单的python socket编程
http://blog.csdn.net/winnie8829/article/details/37874355
bear_fish
2018/09/20
6150
计算机专业术语-socket
根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。 (1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。 (2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。 (3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
咻一咻
2020/05/29
1.2K0
Python Socket通讯例子详解
python中内置的socket模块使得网络编程更加简单化,下面就通过两个小小脚本来了解客户端如何与服务器端建立socket。
py3study
2020/01/06
8940
Python 聊天程序
套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。它们允许程序接受并进行连接,如发送和接受数据。为了建立通信通道,网络通信的每个端点拥有一个套接字对象极为重要。
py3study
2020/01/07
1.2K0
python基础学习19----sock
ip地址:InetAddress 网络中设备的标识,不易记忆,可用主机名(计算机的标识号)
py3study
2020/01/19
7810
python基础学习19----sock
Python网络编程
套接字是计算机网络数据结构。在任何类型的通信开始之前,网络应用程序必须创建套接字。可以将它们比作电话插孔,没有它将无法进行通信。
py3study
2020/01/15
7880
网络编程socket
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
Wyc
2018/09/11
9030
网络编程socket
python基础之socket编程
python基础之socket编程 一 TCP/IP五层模型 在每一层都工作着不同的设备,比如我们常用的交换机就工作在数据链路层的,一般的路由器是工作在网络层的。 在每一层实现的协议也各不同,即每一
用户1214487
2018/01/23
2.9K0
python基础之socket编程
Python学习 :socket基础
  - socket为接口通道,内部封装了IP地址、端口、协议等信息;我们可以看作是以前的通过电话机拨号上网的年代,socket即为电话线
py3study
2020/01/17
9980
经常打游戏、刷视频,却不了解它们底层的通信机制吗?来我给你聊清楚Python Socket通信原理
至于数据在网络中是怎么走的,咱先不说,那个太底层了,咱今天见就说如何将数据从咱的屏幕上放到网络流中去。 这可不是键盘敲敲,回车一按的事情,在这背后,那也是百转千回。
看、未来
2021/09/18
8190
python的socket编程
转自http://www.oschina.net/question/12_76126
py3study
2020/01/10
8300
Python Socket 编程详细介绍(转)
套接字格式:socket(family, type[,protocal]) 使用给定的套接族,套接字类型,协议编号(默认为0)来创建套接字
超蛋lhy
2018/08/31
3.9K0
socket编程【2】TCP编程
大多数连接都是可靠的TCP连接。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。 下面是一个客户端的例子:
用户2936342
2018/08/27
7270
Python socket 实现进程间通
参考文档 1. http://yangrong.blog.51cto.com/6945369/1339593 2. http://blog.csdn.net/yuxi2046/article/details/6996105 3. http://blog.csdn.net/sealyao/article/details/4704876 4. http://baiying.blog.51cto.com/1068039/1112997
py3study
2020/01/03
1.1K0
Python 网络编程
1、服务器就是一系列硬件或软件,为一个或多个客户端(服务的用户)提供所需的“服务”。它存在唯一目的就是等待客户端的请求,并响应它们(提供服务),然后等待更多请求。 2、客户端/服务器架构既可以应用于计算机硬件,也可以应用于计算机软件。 3、在服务器响应客户端之前,首先会创建一个通信节点,它能够使服务器监听请求。 一、套接字:通信端点 1、套接字   套接字是计算机网络数据结构,它体现了上节中所描述的“通信端点”的概念。在任何类型的通信开始之前,网络应用程序必须创建套接字。   有两种类型的套接字:基于文件和
用户1173509
2018/01/17
1.1K0
python网络编程
在学习 TCP/IP 协议之前,一直对网络编程很陌生,懂得原理之后再看网络编程的代码就觉得十分熟悉,借这个机会来总结记录一下,socket 编程的一般流程如下图,我们应该要将这些流程都记熟,用的时候按照顺序写代码就行了。很多语言都提供了 socket 的库可以直接调用,这次就用 python 来写写吧。
棒棒鸡不棒
2022/09/02
5560
python网络编程
☀️苏州程序大白用万字解析Python网络编程与Web编程☀️《❤️记得收藏❤️》
在现实生产环境中,一个服务端不可能只就服务于一个客户端;通常一个服务端是要能服务多个客户端,以下是多任务的实现思路:
苏州程序大白
2021/10/25
8530
☀️苏州程序大白用万字解析Python网络编程与Web编程☀️《❤️记得收藏❤️》
Python-socket总结
什么是socket所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。
py3study
2020/01/06
7600
[PYTHON] 核心编程笔记(16.P
套接字只有两种一种是面向连接套接字,即在通讯之前一定要建立一条连接,这种通讯方式提供了顺序的,可靠的不会重复的数据传输,每一份要发送的信息都会拆分成多份,每份都会不多不少的到达目的地后重新按顺序拼装起来,传给正在等待的应用程序
py3study
2020/01/08
1.4K0
相关推荐
python socket
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档