`
k_lb
  • 浏览: 799830 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论
  • kitleer: 据我所知,国内有款ETL调度监控工具TaskCTL,支持ket ...
    kettle调度

python Socket编程(一)

 
阅读更多

python的TCP网络通信也是基于套接字的编程,创建一个服务端,服务端的作用就是接受客户端的输入,返回时间+客户端内容:

'''
Created on 2012-3-8

@author: Administrator
'''
#!/usr/bin/env python
from socket import *
from time import ctime




HOST=''
PORT=21567
BUFSIZ=1024
ADDR=(HOST,PORT)

tcpSerSock = socket(AF_INET,SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)

while True:
    print 'waiting for connection...'
    tcpCliSock,addr=tcpSerSock.accept()
    print '...connection from',addr
    
    while True:
        data=tcpCliSock.recv(BUFSIZ)
        if not data:
            break
        tcpCliSock.send('[%s] %s' %(ctime(),data))
        
tcpCliSock.close()
tcpSerSock.close()

客户端就是向服务端发请求并读出打印服务端返回的数据:

'''
Created on 2012-3-8

@author: Administrator
'''
#!/usr/bin/env python
from socket import *
from time import ctime




HOST='localhost'
PORT=21567
BUFSIZ=1024
ADDR=(HOST,PORT)

tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)


while True:
    data=raw_input('>')
    if not data:
        break
    tcpCliSock.send(data)
    data=tcpCliSock.recv(BUFSIZ)
    if not data:
        break
    print data

tcpCliSock.close()

运行结果如下:

>yushh
[Fri Mar 09 14:04:55 2012] yushh
>woshi da bendan
[Fri Mar 09 14:05:36 2012] woshi da bendan
>

注意要点:

1、服务端socket(AF_INET,SOCK_STREAM) 创建tcp连接套接字

2、tcpSerSock.accept()函数返回一个socket和address的元组


一个UDP的服务端demo:

'''
Created on 2012-3-8

@author: Administrator
'''
#!/usr/bin/env python
from socket import *
from time import ctime




HOST=''
PORT=21567
BUFSIZ=1024
ADDR=(HOST,PORT)

udpSerSock = socket(AF_INET,SOCK_DGRAM)
udpSerSock.bind(ADDR)

while True:
    print 'waiting for connection...'
    data,addr = udpSerSock.recvfrom(BUFSIZ)
    udpSerSock.sendto('[%s] %s' %(ctime(),data),addr)
    print '...connection from and return to:',addr
       
udpSerSock.close()

注意要点:

1、sendto()和recvfrom()函数一个是向指定地址发,一个是获得

2、由于是数据报,所以不能保存客户端的套接字,不管客户端发送什么,服务端只能被动响应,也就是所有客户端接收到的内容都是一样的。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics