zoukankan      html  css  js  c++  java
  • 第71学习python使用socketsever实现服务端的并发

    网络协议的最底层就是socket,基于原有socket模块,又封装了一层,就是socketserver

    socketserver 为了实现tcp协议,server端的并发

     服务器端:

    import socketserver

    #实例化一个循环,消息发送和接受,相当于scoket里面的通信循环
    class Mysever(socketserver.BaseRequestHandler):
    def handle(self):
    print("conn is:",self.request) #con
    print("addr is:",self.client_address) #addr

    while True: #通信循环
    #收消息
    try:
    data=self.request.recv(1024)
    if not data :break #如果接受一直空直接退出
    print("收到客户发来的消息:",data)

    #发消息
    self.request.sendall(data.upper())
    except Exception as e:
    print(e)

    if __name__=="__main__":
    #相当建立连接conn
    s=socketserver.ThreadingTCPServer(("127.0.0.1",8080),Mysever) #多线程,可以开几个连接进行接受,连接后实例化(Mysever)通信循环
    s.serve_forever() #循环调用,永远服务


    #socket 有连接循环 和通信循环 。多并发原理和scokte一致


    客户端1:
    import socket
    from socket import *#tcp_server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    ip_port=("127.0.0.1",8080)
    back_log=5
    buffer_size=1024

    tcp_client=socket(AF_INET,SOCK_STREAM)
    tcp_client.connect(ip_port)
    while True:
    mgs=input(">>>").strip()
    if not mgs: continue #如果是空请继续
    if mgs=="qiut":break #如果是qiut 直接退出

    tcp_client.send(mgs.encode("utf-8"))
    print("客户端已经发送消息")

    data=tcp_client.recv(buffer_size)
    print("收到服务器发来的消息",data.decode("utf-8"))

    tcp_client.close()

    客户端2:

    tcp_client=socket(AF_INET,SOCK_STREAM)
    tcp_client.connect(ip_port)
    while True:
    mgs=input(">>>").strip()
    if not mgs: continue #如果是空请继续
    if mgs=="qiut":break #如果是qiut 直接退出

    tcp_client.send(mgs.encode("utf-8"))
    print("客户端已经发送消息")

    data=tcp_client.recv(buffer_size)
    print("收到服务器发来的消息",data.decode("utf-8"))

    tcp_client.close()


    结果:

    E:pycharmpythonpython.exe E:/python资料/helloword/服务器scoketsever.py
    conn is: <socket.socket fd=476, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 51441)>
    addr is: ('127.0.0.1', 51441)
    收到客户发来的消息: b'hello'
    conn is: <socket.socket fd=520, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080), raddr=('127.0.0.1', 51443)>
    addr is: ('127.0.0.1', 51443)
    收到客户发来的消息: b'ninhao'

     

  • 相关阅读:
    js操作cookie
    非常好的前端报表控件,值得收藏一下
    html5 跳到拨打电话功能
    C# 判断客户端是PC还是手机登录
    Oracle RAW类型使用
    多条Json数据转换为泛型数据
    将指定的对象序列化成 JSON 数据。
    ASP.NET MVC4(Razor)从客户端中检测到有潜在危险的 Request.Form 值
    http://v3.bootcss.com/getting-started/
    SQL日期比较 .
  • 原文地址:https://www.cnblogs.com/jianchixuexu/p/11892897.html
Copyright © 2011-2022 走看看