python网络编程(SocketServer、socket)

SocketServer简化了网络服务器的编写。
它有4个类:TCPServer,UDPServer,UnixStreamServer,UnixDatagramServer。
这4个类是同步进行处理的,另外通过ForkingMixIn和ThreadingMixIn类来支持异步
创建服务器的步骤。
首先,你必须创建一个请求处理类,它是BaseRequestHandler的子类并重载其handle()方法
其次,你必须实例化一个服务器类,传入服务器的地址和请求处理程序类。
最后,调用handle_request()(一般是调用其他事件循环或者使用select())或serve_forever()...
集成ThreadingMixIn类时需要处理异常关闭。
daemon_threads指示服务器是否要等待线程终止,要是线程互相独立,必须要设置为True,默认是False。
无论用什么网络协议,服务器类有相同的外部方法和属性。
该模块在python3中已经更名为socketserver。
友情链接

server.cfg

[server]
IP_ADDR=127.0.0.1
IP_PORT=6666

#例子,可能后面会用到
[database]
USERNAME=XXXX
PWD=XXX

server

from socketserver import BaseRequestHandler,TCPServer
from configobj import ConfigObj

filename='server.cfg'
config = ConfigObj(filename)

class EchoHandler(BaseRequestHandler):
    def handle(self):
        print('Got conection from ',self.client_address)
        while True:
            msg=self.request.recv(1024)#1024为buffsize
            if not msg:
                break
            self.request.send(msg)

if __name__=='__main__':
    # 调用handle_request()(一般是调用其他事件循环或者
    # 使用select())或serve_forever()...
    IP_addr=config['server']['IP_ADDR']
    IP_port=int(config['server']['IP_PORT'])
    serv=TCPServer((IP_addr,IP_port),EchoHandler)
    print("正在监听",IP_addr,":",IP_port)
    serv.serve_forever()

socket类可能会涉及的知识:
套接字类型
  套接字类型是指创建套接字的应用程序要使用的通信服务类型。linux系统支持多种套接字类型,最常用的有以下三种:
  (1)SOCK_STREAM:
流式套接字,提供面向连接、可靠的数据传输服务,数据按字节流、按顺序收发,保证在传输过程中无丢失、无冗余。TCP协议支持该套接字。
  (2)SOCK_DGRAM:
数据报套接字,提供面向无连接的服务,数据收发无序,不能保证数据的准确到达。UDP协议支持该套接字。
  (3)SOCK_RAW:
原始套接字。允许对低于传输层的协议或物理网络直接访问,例如可以接收和发送ICMP报文。常用于检测新的协议。

client

from socket import socket,AF_INET,SOCK_STREAM


client=socket(AF_INET, SOCK_STREAM)
# AF_INET代表IPV4
client.connect(('127.0.0.1',6666))
# 需要转为byte字节流传输
client.send(b"hello server")

while True:
    re=client.recv(1024)
    if not re:
        break
    print(str(re))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值