Python socket编程实例详解

   本文实例形式较为详细的讲述了Python socket编程。分享给大家供大家参考。具体如下:

  复制代码 代码如下:

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

  上面的代码创建了一个socket对象。type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。AF_INET表示创建的是ip v4的类型。

  复制代码 代码如下:

  socket(address_family,type,protocol_type):

  上面三个参数的含义是:

  address_family指明要建立哪一类socket。最常用的当然是ip协议,AF_INET。在unix系统中,AF_UNIX也是比较常用的,用于建立unix系统中的进程间通信。

  type用于指定通信类型。通常是建立面向连接的流通信。SOCKET_DGRAM是报文通信。如果address_family设置的是AF_INET,那么对应的是TCP和UDP。

  protocol用于指定协议类型。这个参数是可选的。在建立tcp或者是udp连接的时候他们通常都是0。如果第一个参数是AF_INET,那么这个参数表示是ip包中的protocol字段。

  【UDP本来就不区分server和client。所有节点都是对等的】

  第二步是将socket绑定到指定的地址:

  复制代码 代码如下:

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

  第三步是使用listen方法监听请求:【listen方法中的参数指明可接受的最大连接数】

  复制代码 代码如下:

  sock.listen(5)

  第四步是不断接收请求:收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求。

  复制代码 代码如下:

  connection,address = sock.accept()

  accept方法返回一个含有两个元素的 元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。

  第五步是处理阶段,服务器和客户端通过send和recv方法通信(传输数据)。

  如果send成功了,那么对方的缓冲区已经有你发送的数据了。

  #调用recv 时,服务器必须指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。recv方法在接收数据时会进入“blocked”状态,最后返回一个字符 串,用它表示收到的数据。如果发送的数据量超过了recv所允许的,数据会被截短。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区 删除(以及自上次调用recv以来,客户可能发送的其它任何数据)。

  ?

1
2

connection.settimeout(5)
buf = connection.recv(1024)

  具体处理如下:

  ?

1
2
3
4

if buf == '1':
connection.send('welcome to python server!')
else:
connection.send('please go out!')

  使用send发送数据给客户端。客户端使用recv来接收数据。

  ?

1
2
3
4
5
6
7
8

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost',7556))
import time
time.sleep(2)
sock.send('1')
print sock.recv(1024)
sock.close()

  这就是整个通信过程了。

  全部代码如下:

  server端:

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

#!/usr/bin/env python
import socket
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind(('localhost',7556))
sock.listen(5)
while True:
connection,address = sock.accept()
print "client ip is "
print address
try:
connection.settimeout(5)
buf = connection.recv(1024)
if buf == '1':
connection.send('welcome to python server!')
else:
connection.send('please go out!')
except socket.timeout:
print 'time out'
connection.close()

  client端如下:

  ?

1
2
3
4
5
6
7
8
9

#!/usr/bin/env python
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost',7556))
import time
time.sleep(2)
sock.send('1')
print sock.recv(1024)
sock.close()

  记住,socket使用完毕之后要关闭。【上面的代码,server端忘记关闭socket了】

  当然,在socket连接的过程中,最好使用try except来做一下错误处理。

  注意,accept函数和recv函数都是阻塞式的。也就是说,他们一直在等待,直到有客户端连接过来或者是后者的有数据可以接收。

  下面是一个FTP的小例子。

  使用了多线程来处理每一个请求。

  示例代码点击此处本站下载。

  如果传输路径不存在则建立。

  希望本文所述对大家的Python程序设计有所帮助。

时间: 2016-05-28

Python socket编程实例详解的相关文章

Java基于Socket实现网络编程实例详解_java

一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机. 而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的. 目前较为流行的网络编程模型是客户机/服务器(C/S)结构.即通信双方一方作为服务器等待客户提出请求并予以响应.客户则

利用Python破解验证码实例详解_python

一.前言 本实验将通过一个简单的例子来讲解破解验证码的原理,将学习和实践以下知识点:       Python基本知识       PIL模块的使用 二.实例详解 安装 pillow(PIL)库: $ sudo apt-get update $ sudo apt-get install python-dev $ sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev \ libfreetype6-dev liblcms2-dev lib

python xml解析实例详解_python

python xml解析 first.xml  <info> <person > <id>1</id> <name>fsy</name> <age >24</age> </person> <person> <id>2</id> <name>jianjian</name> <age>24</age> </pers

C++Builder注册表编程实例详解

一.注册表编程详解 Windows 注册表中包含了系统配置.机器硬件配置. Win32 应用程序和用户的其他配置信息.许多高级一些的功能都要通过对注册表的操作来实现.在 WinAPI 中提供了 RegCgreateKey() . RegOpenKey() . RegQueryValue() 等函数操作注册表,但是用这些函数来操作注册表使用起来非常麻烦.而利用 C ++ Builder 的 TREGISTRY 类,我们则可以轻松实现对注册表的操作.下面我先介绍一下 TRegistry 类使用方法.

Python冒泡排序注意要点实例详解_python

冒泡排序注意三点: 1. 第一层循环可不用循环所有元素. 2.两层循环变量与第一层的循环变量相关联. 3.第二层循环,最终必须循环集合内所有元素. 示例代码一: 1.第一层循环,只循环n-1个元素. 2.当第一层循环变量为n-1时,第二层循环所有元素. s = [3, 4, 1, 6, 2, 9, 7, 0, 8, 5] # bubble_sort for i in range(0, len(s) - 1): for j in range(i + 1, 0, -1): if s[j] < s[j

PHP Socket 编程过程详解

介绍 Socket用于进程间通信.进程间通信通常基于客户端-服务端模型.此时,客户端-服务端是可以彼此交互的应用程序.客户端和服务端之间的交互需要连接.Socket编程负责的就是为应用程序之间建立可进行交互的连接. 在本文中,我们将学习如何用PHP创建一个简单的客户端-服务端.我们还将学习如何客户端应用程序如何发送消息到服务端,以及如何从服务端接受消息. 使用代码 目的:开发一个客户端用于发送string消息到服务端,服务端将相同的信息反转后返回给客户端. PHP服务器 第1步:设置变量,如"主

Python多进程机制实例详解

  本文实例讲述了Python多进程机制.分享给大家供大家参考.具体如下: 在以前只是接触过PYTHON的多线程机制,今天搜了一下多进程,相关文章好像不是特别多.看了几篇,小试了一把.程序如下,主要内容就是通过PRODUCER读一个本地文件,一行一行的放到队列中去.然后会有相应的WORKER从队列中取出这些行. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 3

python字典排序实例详解

  本文实例分析了python字典排序的方法.分享给大家供大家参考.具体如下: 1. 准备知识: 在python里,字典dictionary是内置的数据类型,是个无序的存储结构,每一元素是key-value对: 如:dict = {'username':'password','database':'master'},其中'username'和'database'是key,而'password'和'master'是value,可以通过d[key]获得对应值value的引用,但是不能通过value得

python多线程用法实例详解_python

本文实例分析了python多线程用法.分享给大家供大家参考.具体如下: 今天在学习尝试学习python多线程的时候,突然发现自己一直对super的用法不是很清楚,所以先总结一些遇到的问题.当我尝试编写下面的代码的时候: 复制代码 代码如下: class A():     def __init__( self ):         print "A" class B( A ):     def __init__( self ):         super( B, self ).__in