zoukankan      html  css  js  c++  java
  • TCP网络协议通信原理(客户端和服务器端)

    下面直接用代码来说明TCP协议的基础知识:

    服务器端代码块:

    from socket import *
    from time import ctime
    '''
    指定主机地址、工作端口号、接收缓存的长度
    服务器端的HOST为空,表示它可以使用任意可用的地址
    '''
    HOST=''
    PORT=21263
    BUFSIZ=1024
    ADDR=(HOST,PORT)
    
    #  创建套接字 ,把套接字绑定到服务器地址,开启TCP监听
    tcpSvrSock=socket(AF_INET,SOCK_STREAM)
    tcpSvrSock.bind(ADDR)
    tcpSvrSock.listen(5)
    while True:
        '''
        不断等待接收客户端的连接。我们通过accept()
        获取到客户端的tcpCliSock和addr,于是后续可以通过这个
        tcpCliSock专门处理该客户端的事务(从而与其他请求的客户端区分开来)
        '''
        tcpCliSock,addr=tcpSvrSock.accept()
        print('内容来自:',addr)
        # print('tcpCliSock:',tcpCliSock)
        while True:
            data=tcpCliSock.recv(BUFSIZ)
            if not data:
                break
            # 不为空则把消息解析出来,添加时间戳
            data=data.decode('utf-8')
            print(data)
            data1=input('回复客户端:')
    
            respMsg='[%s]%s'%(ctime(),data1)
            # 过重新编码成ASCII字节后,通过send()发送回去给客户端
            tcpCliSock.send(bytes(respMsg,'utf-8'))
        tcpCliSock.close()
    tcpSvrSock.close()

    客户端代码块:

    from socket import *
    '''
     指定主机地址、工作端口号、接收缓存的长度
     这里的HOST为服务器端所在主机的地址,由于我是在本地进行通信测试的,
     所以地址设置为127.0.0.1(localhost)。在实际网络通信的时候,根据
     具体的情况进行相应的修改。客户端填写的PORT必须与服务器填写的PORT
     对应才能正常通信。
    '''
    HOST='127.0.0.1'
    PORT=21263
    BUFSIZ=1024
    ADDR=(HOST,PORT)
    
    #  创建套接字 ,主动调用并通过connect()连接到服务器。
    tcpCliSock=socket(AF_INET,SOCK_STREAM)
    tcpCliSock.connect(ADDR)
    while True:
        data=input('>>>')
        if not data:
            break
        tcpCliSock.send(bytes(data,'utf-8'))
        if not data:
            break
        # 接收服务器返回的数据
        rscData=tcpCliSock.recv(BUFSIZ)
        print(rscData.decode('utf-8'))
    
    tcpCliSock.close()
    
    '''
    如果我们想要将代码改成相应的ipv6的形式,
    我们只需要把HOST改成“::1”,sock_family改成AF_INET6即可。
    '''

    更多详细内容可以参见:https://blog.csdn.net/sinat_36645384/article/details/79128137

    更多端口协议见:https://www.cnblogs.com/taoke2016/p/9047981.html

  • 相关阅读:
    Ajax实践学习笔记(三) Ajax应用模型
    代码之美
    Git 和Github初次使用 (转) Anny
    VisitsPageViewUnique Visitors: Metrics From GA Anny
    Building and Installing Node.js Anny
    Callback in NodeJS Anny
    Intall Apache & php on Ubuntu Anny
    [转载]Linux系统下超强远程同步备份工具Rsync使用详解 Anny
    Cannot Boot WEBrick: "WARN TCPServer Error: Address already in use " Anny
    chmod(转) Anny
  • 原文地址:https://www.cnblogs.com/Dark-fire-liehuo/p/9765522.html
Copyright © 2011-2022 走看看