python socket编程学习笔记

Socket是应用层与TCP/IP协议簇通信的中间层,可以看作提供给应用层所用的接口.
Python中,主要用socket.socket([family[,type[,proto]]])方法来创建一个socket

family-套接字地址结构,有AF_INET AF_INET6和AF_UNIX.
type - 数据传输的类型,广泛使用的有SOCK_STREAM(数据流)和SOCK_DGRAM(数据报文)
SOCK_STREAM是面向连接的,SOCK_DGRAM是无连接的,如ATM和TCP协议属于SOCK_STREAM类型,
而IRDA和UDP协议属于SOCK_DGRAM类型.
proto - 指明所要接收的协议包

 1 vi server_socket1.py
 2 -------------------------------------------------------------------------------------------------
 3 #!/usr/bin/env python
 4 #-*-coding:utf-8-*-
 5 import socket
 6 import sys
 7 SERVER_SOCKET = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 8 HOST = ''
 9 PORT = 30000
10 SERVER_SOCKET.bind((HOST,PORT))
11 SERVER_SOCKET.listen(10)
12 print "TCP SERVER START......"
13 
14 try:
15     while 1:
16        connection,address = SERVER_SOCKET.accept()
17        print ("Client Connection Address:",address)
18        connection.send("Welcome to ftp server:")  
19        data = connection.recv(4096)
20        print (str(data)) 
21        connection.close()
22     print "TCP server is finshed"
23 except KeyboardInterrupt:
24     print "\033[41;36m Warning: You operate the CTRL+ C,program interrupt and quit!!! \033[0m"
25     sys.exit()
26 SERVER_SOCKET.close()
27 -------------------------------------------------------------------------------------------------
28 
29 vi client_socket.py
30 -------------------------------------------------------------------------------------------------
31 #!/usr/bin/env python
32 #-*-coding:utf-8-*-
33 
34 import socket
35 print "CLIENT START...."
36 CLIENT_SOCKET = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
37 
38 HOST= "192.168.0.12"
39 PORT = 30000
40 CLIENT_SOCKET.connect((HOST,PORT))
41 #while 1:
42 #INPUT = raw_input("Input information:")
43 CLIENT_SOCKET.send("hello socket_server,Im socket_client!")
44 Received_data = CLIENT_SOCKET.recv(4096)
45 print "Receve from server:",repr(Received_data)
46 CLIENT_SOCKET.close()
47 -------------------------------------------------------------------------------------------------

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)如果端口号正在使用,主机名不正确或端口已被保留,
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方法关闭连接。

posted @ 2013-07-01 23:49  study-notes  阅读(211)  评论(0编辑  收藏  举报