python(28)-网络通信之TCP/IP-服务器端

TCP/IP 传输 分服务器端和客户端。
 要实现一个支持高并发、高性能的server服务器其实很难。
 但原理上就这么6步:本文简而示之,给大家一个参考吧。
 针对多客户端的处理,我这只写了个while循环。 

1.创建socket实例
2.绑定 bind(,)
3.监听 listen()
4.接收 accept()
5.连接 conn
6.关闭 close()

import socket
import os,subprocess



def socketServerTest():
    myserver = socket.socket()         #1.创建socket实例
    myserver.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    myserver.bind(("localhost",9090))  #2.绑定ip port
    myserver.listen()                  #3.监听


    while True:
        print("等待客户端的连接...")
        conn,addr = myserver.accept()  # 4.接受并建立与客户端的连接,程序在此处开始阻塞,只到有客户端连接进来...
        print("新连接:", addr)
        while True:
            data = conn.recv(1024)    #5.连接并接收数据
            if not data:
                print("客户端断开了...")
                break
            # 如果想让服务器做处理,就在这里加点代码 比如SSH 把接收到的数据再返回去
                ##############################################################
                # res = os.popen(data.decode()).read()                                          #py3 里socket发送的只有bytes,os.popen又只能接受str,所以要decode一下
                res = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE).stdout.read()  # 跟上面那条命令的效果是一样的
                if len(res) == 0:
                    res = "cmd exec success,has not output!".encode("utf-8")
                conn.send(str(len(res)).encode("utf-8"))                                        # 发送数据之前,先告诉客户端要发多少数据给它
                print("等待客户ack应答...")
                client_final_ack = conn.recv(1024)                                               # 等待客户端响应
                print("客户应答:", client_final_ack.decode())
                print(type(res))
                conn.sendall(res)  # 发送端也有最大数据量限制,所以这里用sendall,相当于重复循环调用conn.send,直至数据发送完毕

            ##############################################################


            print("收到消息:", data)
            conn.send(data.upper())
    myserver.close()                   #6.关闭


def main():
    print("socketServerTest")
    socketServerTest()


if __name__ == '__main__':
    main()


 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值