• python TCP编程再试牛刀


    跟上一篇一样,这篇也是对照着廖雪峰的python教程里面的代码来敲的:

    该示例演示的是C-S服务模型,Server端接收来自客户端的请求,然后只是很简单地给客户端返回“Hello” + 来自客户端的原文。核心在于两端socket的创建和连接以及数据的发送和接收。

    Server端:Server.py:

    # -*- coding: utf-8 -*-
    '''
    Created on 2016年8月3日
    
    @author: lv.lang
    '''
    import socket
    import time, threading
    
    #创建一个基于ipv4和TCP协议的Socket
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    #监听端口
    s.bind(('127.0.0.1',9999)) #将socket绑定地址和端口
    s.listen(5)  #传入参数指定等待连接的最大数量
    print('Waiting for connection...')
    
    def tcplink(sock, addr):
        print('Accept new connection from %s:%s...' % addr)
        sock.send(b'Welcome!')
        while True:
            data = sock.recv(1024)
            time.sleep(1)
            if not data or data.decode('utf-8') == 'exit':
                break
            sock.send(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'))
        sock.close()
        s.close()
        print('Connection from %s:%s closed.' % addr)
    
    #用一个永久循环来接受来自客户端的连接
    while True:
        #接受一个连接
        sock, addr = s.accept()
        #创建新线程来处理TCP连接
        t = threading.Thread(target = tcplink, args = (sock, addr))
        t.start()
    
    

    (1)首先创建用于TCP连接的Socket

    (2)将socket和地址及端口绑定

    (3)监听端口

    (4)用个死循环监听端口进来的数据

    (5)每接收到一次数据都创建一个线程来处理

    (6)对数据进行打包,返回给客户端

    (7)关闭TCP连接


    客户端Client.py:

    # -*- coding: utf-8 -*- 
    
    '''
    Created on 2016年8月3日
    
    @author: lv.lang
    '''
    import socket
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 建立连接
    s.connect(('127.0.0.1', 9999))
    # 接收欢迎信息
    print(s.recv(1024).decode('utf-8'))
    for data in [b'Michael', b'Tracy', b'Sarah']:
        # 发送数据
        s.send(data)
        print(s.recv(1024).decode('utf-8'))
    s.send(b'exit')
    s.close()

    (1)首先创建用于TCP连接的Socket

    (2)将socket和地址及端口绑定

    (3)发送数据

    (4)接收数据,并将其打印

    (5)关闭TCP连接


    运行结果:

    先运行Server.py:



    再运行Client.py:




  • 相关阅读:
    12 【结构型】 浅谈享元模式的理解与使用
    11【结构型】浅谈 外观模式 理解与使用~
    【Maven基础入门】02 了解POM文件构建
    【Maven基础入门】01 Maven的安装与环境变量的配置
    02【创建型】原型模式
    01【创建型】单例模式
    10 浅谈 装饰器模式的理解与使用
    Java JDK1.8源码学习之路 2 String
    Java JDK1.8源码学习之路 1 Object
    ApachShiro 一个系统 两套验证方法-(后台管理员登录、前台App用户登录)同一接口实现、源码分析
  • 原文地址:https://www.cnblogs.com/lvlang/p/10586422.html
Copyright © 2020-2023  润新知