zoukankan      html  css  js  c++  java
  • 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:




  • 相关阅读:
    java文件压缩与解压
    常见Java库漏洞汇总
    ref:Spring JDBC框架
    ref:web 防止SQL注入方法
    ref:spring配置数据库方式
    ref:web security最新学习资料收集
    Hack12306
    mysql copy data from table to another
    MYSQL
    tcpdump 抓包过滤
  • 原文地址:https://www.cnblogs.com/lvlang/p/10586422.html
Copyright © 2011-2022 走看看