zoukankan      html  css  js  c++  java
  • 通过python实现TCP编程

    伪代码:
    ss = socket() #创建服务器套接字
    ss.bind() #把地址绑定到套接字上
    ss.listen() #监听连接(最大连接数)
    info_loop: #服务器无限循环
    cs = ss.accept() #接受客户端连接
    comm_loop: #通信循环
    cs.recv()/cs.send() #对话(接收/发送)
    cs.close() #关闭客户端套接字
    ss.close() #关闭服务器

    所有的套接字都用socket.socket()函数来创建,服务器需要“坐在某个端口上“等待请求”所以它们必须要“绑定”到一个本地地址上,
    由于TCP是一个面向连接的通信系统,在TCP服务器开始工作之前,要先完成一些设置,TCP服务器必须“监听”连接,设置完成之后服务器
    就可以进入无限循环了。

    一个简单的“单线程”服务器会调用accept()函数等待连接的到来,默认情况下accept()函数是阻塞的,即程序在连接到来之前会处于挂起状态,
    套接字也支持非阻塞模式。

    一旦接收到一个连接,accept()函数就会返回一个单独的客户端套接字用于后续的通信。

    简单的TCP服务器

    代码如下

    #!/usr/bin/env python3
    #-*- coding:utf-8 -*-
    
    from socket import *
    from time import ctime
    
    host = ''
    port = 12345
    buffsize = 2048
    ADDR = (host,port)
    
    tctime = socket(AF_INET,SOCK_STREAM)
    tctime.bind(ADDR)
    tctime.listen(3)
    
    while True:
        print('Wait for connection ...')
        tctimeClient,addr = tctime.accept()
        print("Connection from :",addr)
    
        while True:
            data = tctimeClient.recv(buffsize).decode()
            if not data:
                break
            tctimeClient.send(('[%s] %s' % (ctime(),data)).encode())
        tctimeClient.close()
    tctimeClient.close()

    TCP客户端代码:

    #!/usr/bin/env python3
    #-*- coding:utf-8 -*-
    
    from socket import *
    
    HOST ='localhost'
    
    PORT = 12345
    
    BUFFSIZE=2048
    
    ADDR = (HOST,PORT)
    
    tctimeClient = socket(AF_INET,SOCK_STREAM)
    
    tctimeClient.connect(ADDR)
    
    while True:
        data = input(">")
        if not data:
            break
        tctimeClient.send(data.encode())
        data = tctimeClient.recv(BUFFSIZE).decode()
        if not data:
            break
        print(data)
    tctimeClient.close()

    note:

    如果实在ubuntu下面做练习,需要在防火墙上添加allow条目,具体命令是

    ufw allow 12345/tcp

    也可以直接关闭防火:

    ufw disable

  • 相关阅读:
    kernel 于ioctl申请书
    顺时针打印矩阵
    HDU 1557 权利指数 国家压缩 暴力
    从混沌到有序--熵
    分层思想总结
    什么是分层架构模式
    分层设计
    分层设计思想
    软件的生长方式
    设计模式、SOLID原则:组件与联系
  • 原文地址:https://www.cnblogs.com/alben-cisco/p/7051286.html
Copyright © 2011-2022 走看看