python socket 多处理

Posted on Posted in python

**相关**

[python io阻塞][1]
[一个典型的python socket][2]

## socket类型

- socket.AF_UNIX(别名socket.AF_LOCAL) 只能够用于单一的unix系统进程间通信
- socket.AF_INET 服务器之间的网络通信
- socket.AF_INET6 ipv6

- socket.SOCK_STREAM 流式socket,for tcp
- socket.SOCK_DGRAM 数据报式socket,for udp
- socket.SOCK_RAW 原始套接字,普通的套接字无法处理 ICMP/IGMP 等网络报文,而SOCK_RAW可以。其次,SOCK_RAW也可以处理特殊的IPv4报文。此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
- socket.SOCK_RDM 一种可靠的udp形式,即保证交付数据报但不保证顺序。SOCK_RAW用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAW通常仅限于高级用户或管理员运行的陈述使用
- socket.SOCK_SEQPACKET 可靠的连续数据包服务

## socket 函数

socket(family,type[,protocal]) 使用给定的地址族、套接字类型、协议编号(默认为0)来创建套接字。

1、s.bind(address) 将套接字绑定到地址。address地址的格式取决于地址族。在AF_INET下,以元祖(host,port)的形式表示地址。

2、s.listen(backlog) 开始坚挺出入连接。backlog指定在拒绝连接之前,操作系统挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。

3、s.connect(address) 连接到address处的套接字。一般,address的格式为元祖(hostname,port),如果连接同一台机器上的服务器,可以将hostname设为‘localhost’。如果连接出错,返回socket.error错误

4、s.connet_ex(address) 接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接受和发送数据。address是连接客户端的地址。

5、s.accept() 接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接受和发送数据。address是连接客户端的地址。

6、s.close() 关闭套接字

**code**

> server

  1. #! /usr/bin/env python  
  2. # -*- coding: utf-8 -*-  
  3. # vim:fenc=utf-8  
  4.   
  5. import SocketServer  
  6.   
  7. class myTCPHandler(SocketServer.BaseRequestHandler):  
  8.     def handle(self):  
  9.         print "Connect IP: {}".format(self.client_address )  
  10.         while 1:  
  11.             self.data = self.request.recv(4096)  
  12.             if not self.data: continue  
  13.             print self.data  
  14.             self.request.sendall(self.data)  
  15. host,port = '127.0.0.1',9999  
  16. server = SocketServer.ThreadingTCPServer((host,port), myTCPHandler )  
  17. server.serve_forever()  

> client

  1. #! /usr/bin/env python  
  2. # -*- coding: utf-8 -*-  
  3. # vim:fenc=utf-8  
  4.   
  5. import socket  
  6.   
  7. HOST = '127.0.0.1'  
  8. PORT = 9999  
  9. s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  
  10. s.connect((HOST,PORT))  
  11. s.sendall('hello,t')  
  12. data = s.recv(1024)  
  13. s.close()  
  14. print repr(data)  

[1]: http://liuhonghe.me/python-socket-io.html
[2]: http://liuhonghe.me/python-socket-di.html

» 转载请注明来源:若我若鱼 » python socket 多处理

Leave a Reply

Your email address will not be published. Required fields are marked *

nine + thirteen =