博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Python 系列》- 网络编程
阅读量:6860 次
发布时间:2019-06-26

本文共 3823 字,大约阅读时间需要 12 分钟。

hot3.png

一、使用内置标准库

TCP服务端

#coding:utf-8from socket import *from time import ctimeHOST = ''PORT = 9998BUFSIZ = 1024ADDR = (HOST, PORT)tcpSerSock = socket(AF_INET, SOCK_STREAM)tcpSerSock.bind(ADDR)tcpSerSock.listen(5)while True:    print 'wating for connection...'    tcpCliSock, addr = tcpSerSock.accept()    print '...connected from :',addr    while True:        data = tcpCliSock.recv(BUFSIZ)        if not data:            break        tcpCliSock.send('[%s] %s'%(ctime(),data))    tcpCliSock.close()tcpSerSock.close()

TCP客户端

#coding:utf-8from socket import *HOST = '127.0.0.1'PORT = 9998BUFSIZ = 1024ADDR = (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:        breaktcpCliSock.close()

UDP服务端

#coding:utf-8from socket import *from time import ctimeHOST = ''PORT = 9997BUFSIZ = 1024ADDR = (HOST,PORT)udpSerSock = socket(AF_INET, SOCK_DGRAM)udpSerSock.bind(ADDR)while True:    print 'wating for message...'    data, addr = udpSerSock.recvfrom(BUFSIZ)    udpSerSock.sendto('[%s] %s'%(ctime(),data),addr)    print '...received from and returned to :',addrudpSerSock.close()

UDP客户端

#coding:utf-8from socket import *HOST = 'localhost'PORT = 9997BUFSIZ = 1024ADDR = (HOST, PORT)udpCliSock = socket(AF_INET, SOCK_DGRAM)while True:    data = raw_input('> ')    if not data:        break    udpCliSock.sendto(data, ADDR)    data, ADDR = udpCliSock.recvfrom(BUFSIZ)    if not data:        break    print dataudpCliSock.close()

二、使用SocketServer模块

SocketServer是标准库中的一个高级模块,它的目标是简化很多样板代码,它们是创建网络客户端和服务器所必须的代码。

应用程序现在是事件驱动的,这意味着只有在系统中的事件发生时,它们才会工作。

事件包括信息的发送和接受

TCP服务端

#coding:utf-8from SocketServer import TCPServerfrom SocketServer import StreamRequestHandlerfrom time import ctimeHOST = ''PORT = 9989ADDR = (HOST, PORT)class MyRequestHandler(StreamRequestHandler):    def handle(self):        print '...connected from:',self.client_address        self.wfile.write('[%s]%s'%(ctime(),self.rfile.readline()))tcpServ = TCPServer(ADDR, MyRequestHandler)print 'waiting for connection...'tcpServ.serve_forever()

TCP客户端

#coding:utf-8from socket import *HOST = 'localhost'PORT = 9989BUFSIZ = 1024ADDR = (HOST, PORT)while True:    tcpCliSock = socket(AF_INET, SOCK_STREAM)    tcpCliSock.connect(ADDR)    data = raw_input('> ')    if not data:        break    tcpCliSock.send('%s\r\n'%data)    data = tcpCliSock.recv(BUFSIZ)    if not data:        break    print data.strip()    tcpCliSock.close()

三、使用Twisted框架

Twisted是一个完整的事件驱动的网络框架,利用他既能使用也能开发完整的异步网络应用程序和协议。

TCP服务端

#coding:utf-8from twisted.internet import protocol,reactorfrom time import ctimePORT = 9987class TSServProtocol(protocol.Protocol):    def connectionMade(self):        clnt = self.clnt = self.transport.getPeer().host        print '...connected from ',clnt    def dataReceived(self, data):        self.transport.write('[%s]%s'%(ctime(),data))factory = protocol.Factory()factory.protocol = TSServProtocolprint 'waiting for connection...'reactor.listenTCP(PORT, factory)reactor.run()

TCP客户端

from twisted.internet import protocol,reactorHOST = 'localhost'PORT = 9987class TSClntProtocol(protocol.Protocol):    def sendData(self):        data = raw_input('> ')        if data:            print '...sending %s...'%data            self.transport.write(data)        else:            self.transport.loseConnection()    def connectionMade(self):        self.sendData()    def dataReceived(self, data):        print data        self.sendData()class TSClnFactory(protocol.ClientFactory):    protocol = TSClntProtocol    clientConnectionLost = clientConnectionFailed = \        lambda self,connector,reason:reactor.stop()reactor.connectTCP(HOST,PORT,TSClnFactory())reactor.run()

 

转载于:https://my.oschina.net/kimisme/blog/1603201

你可能感兴趣的文章
vim粘贴板
查看>>
Oracle重量级表的优化查询处理
查看>>
软件包管理器
查看>>
cactiEZ不显示图像的问题
查看>>
Debian wheezy下通过apt安装nginx
查看>>
Symantec备份之(3)安装Agent for linux server - 潜入技术的海洋
查看>>
easyUI 数据表格 没有数据 只有列超过datagrid的宽度时候不显示横向滚动条
查看>>
python:用pyinstaller做个排列组合的小工具
查看>>
PostgreSQL备份之pg_basebackup
查看>>
Eclipse java注释模板修改
查看>>
MAVEN Dynamic Web Module 3.0 requires Java 1.6 or newer
查看>>
sudo及其配置文件sudoers详解、实例
查看>>
华为 eNSP 配置 wlan 简单
查看>>
Jetbrains Idea 内 CoffeeScript 的 mocha 单元测试的配置
查看>>
SSH 端口转发
查看>>
Spring AOP根据JdbcTemplate方法名动态设置数据源
查看>>
sublime3学习笔记2:编辑
查看>>
字节缓冲[转载]
查看>>
又做梦了..
查看>>
抽象代数的研究对象辨析
查看>>