socket--basic programming

最近在读Core Python Application Programming 3rd,讲解很详细,例子也比较丰富,对于入门之后想对python的各种应用有进一步的认识的同学,推荐读这本书。socket编程是本书的第二章,写技术博客的初衷很简单,总结知识,梳理思路,同时也是对大脑信息的整理,方便日后回顾或查阅。本章的编排主要分为三个层次,基础库(module)socket,进阶库SocketServer和第三方库twisted。本篇用的是socket和TCP协议。

Server端代码:

from time import ctime
import os
from socket import *

HOST = ''
PORT = 21789
BUFSIZE = 1024
ADDR = (HOST, PORT)

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

while True:
    print 'waiting connection...'
    tcpClntSock, addr = tcpServSock.accept()
    print 'connected by:', addr
    while True:
        data = tcpClntSock.recv(BUFSIZE)
        if not data:
            break
        elif data == 'date':
            tcpClntSock.send('Server time:%s' % ctime())
        elif data == 'os':
            tcpClntSock.send('OS info:%s' % os.name)
        elif data == 'ls':
            tcpClntSock.send('The listing of current dir:%s' % os.listdir(os.curdir))
        else:
            tcpClntSock.send('You can type "date","os","ls" to get corresponding information on server.')
        print 'This is the raw data:', data
    tcpClntSock.close()
tcpServSock.close()

Client端代码:

from socket import *

HOST = '127.0.0.1'
PORT = 21789
BUFSIZE = 1024
ADDR = (HOST,PORT)

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

while True:
    data = raw_input('> ')
    if not data:
        break
    tcpCliSock.send('%s' % data)
    data = tcpCliSock.recv(BUFSIZE)
    if not data:
        break
    print data.strip()
tcpCliSock.close()

TCP是面向连接的可靠传输协议,因此先建立连接,才能进行信息传递。注意,由于服务器是被动接受客户端的连接请求,所以服务器一定要先于客户端运行,使之可以处于监听状态,才能接受客户端的请求。

运行结果:
Server

waiting connection...
connected by: ('127.0.0.1', 59222)
waiting connection...

Client:


> adsf
You can type "date","os","ls" to get corresponding information on server.
> date
Server time:Wed May 27 21:07:51 2015
> os
OS info:posix
> ls
The listing of current dir:['.DS_Store', 'ChatClnt.py', 'ChatServ.py', 'tsTclnt.py', 'tsTclntTW.py', 'tsTserv.py', 'tsTservSS.py', 'tsTServTW.py', 'tsUclnt.py']
> 

Process finished with exit code 0
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值