【python】一个简单的echo多线程服务器(含客户程序)

程序说明:7-1 编写一个简单的echo多线程服务器(含客户程序),将用户发送的内容回送给客户程序。
在本程序中,用户发送的内容是Good morning.Nice to meetyou.My old sport.
先运行服务器端,在运行客户端,为展示多线程,我们可以同时启动两个客户端并通过查看服务器端看出
多线程的工程特点。其中服务器端演示如下
Accept new connection from 127 .0.0.1:54609. . .
Accept new connection from 127 .0.0.1:54612. . .
Connection from 127 .0.0.1: 54609 closed .
Connection from 127 .0.0.1:54612 closed .

运行方式:在cmd命令行下执行:
python 7-1.py server
python 7-1.py client

import socket,threading, time, argparse

def tcplink(sock, addr):
    print('Accept new connection from %s:%s...' % addr)
    while True:
        data = sock.recv(1024)
        time.sleep(1)
        if not data or data.decode('utf-8') == 'exit':
            break
        sock.send(('client just say:, %s.' % data.decode('utf-8')).encode('utf-8'))
    sock.close()
    print('Connection from %s:%s closed.' % addr)

def server(address,port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #建立一个socket
    s.bind((address, port)) #监听端口
    #紧接着,调用listen()方法开始监听端口,传入的参数指定等待连接的最大数量
    s.listen(5)
    print('Waiting for connection...')
    while True:
        # 接受一个新连接: 返回的sock用来通信,addr是客户机的地址
        sock, addr = s.accept()
        t = threading.Thread(target=tcplink, args=(sock, addr)) # 创建新线程来处理TCP连接:
        t.start()

def client(address,port):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 建立连接:
    s.connect((address, port))
    for data in [b'Good morning', b'Nice to meetyou', b'My old sport']:
        s.send(data) # 发送数据:
        print(s.recv(1024).decode('utf-8'))
    s.send(b'exit')
    s.close()

if __name__ == '__main__':
    choices = {'client': client, 'server': server}
    parser = argparse.ArgumentParser(description='echo多线程服务器(含客户程序),将用户发送的内容回送给客户程序')
    parser.add_argument('role', choices=choices, help='选择服务器或客户端启动')
    parser.add_argument('-host',default='127.0.0.1',help='the server listens at (default 127.0.0.1);'
                        ' host the client sends to ')
    parser.add_argument('-p', metavar='PORT', type=int, default=6666,help='UDP port (default 6666)')
    args = parser.parse_args()
    function = choices[args.role]
    function(args.host, args.p)

实验结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值