zoukankan      html  css  js  c++  java
  • python网络编程(转)

    本文代码转自廖雪峰老师的python教程

    网络编程底层其实就是一个socket,代表两台机器之间的一个连接。

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    AF_INET指定使用IPv4协议,SOCK_STREAM指定使用面向流的TCP协议

    提供服务的一方是服务端,服务端程序需要绑定(s.bind())一个端口,然后长期监听(s.listen())这个端口,收到消息(s.accept())后给予相应反馈。 

    反馈消息是通过新启动一个线程来实现的,这样就可以实现对同时刻多个访问的反馈。

    tcp_server.py

    import socket
    import threading
    import time
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind(('*.*.*.*', 9999))
    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()
        print('Connection from %s:%s closed.' % addr)
    
    while True:
        # 接受一个新连接:
        sock, addr = s.accept()
        # 创建新线程来处理TCP连接:
        t = threading.Thread(target=tcplink, args=(sock, addr))
        t.start()

    发送消息的一方是客户端,客户端同样要建立一个socket,尝试对服务端进行连接(s.connect(),需要知道服务端的ip和端口);

    建立连接之后,发送消息(s.send()),同时也可以从服务端获取消息(s.recv());

    完成任务后将连接进行关闭。

    tcp_client.py

    import socket
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 建立连接:
    s.connect(('*.*.*.*', 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()
  • 相关阅读:
    技术管理之路三、团队建设:怎么带队伍?
    技术管理之路五、管理沟通:管理的必修课!
    职场工作方法论:计划安排,时间管理的“四象限法则”
    职场工作方法论:目标管理SMART原则
    激励方法论1、马斯洛需求模型
    mybatis PageHelper 分页组件优化
    async 和 await
    spring cloud 负载均衡 平滑上下线
    vue 重新渲染组件
    spring cloud 超时整理
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/9936229.html
Copyright © 2011-2022 走看看