py08_02:socket之tcp

 

 

import socket


def main():
    # 1. 创建套接字
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 2. 绑定本地信息
    tcp_server_socket.bind(('', 7890))

    # 3. 让默认的套接字变成由主动变为被动的
    tcp_server_socket.listen(128)

    # 4. 等待客户端的链接(accept)
    new_tcp_socket, client_addr = tcp_server_socket.accept()

    # 5. 接收数据
    recv_data = new_tcp_socket.recv(1024)
    print(recv_data)

    # 回复(附加)
    new_tcp_socket.send('谢谢'.encode('utf-8'))
    
    # 关闭
    new_tcp_socket.close()
    tcp_server_socket.close()


if __name__ == '__main__':
    main()

 

 

 

 

原理拓展图

 

 

 所以在第4步的时间,我们可以把他拆分成套接字与客户端的addr信息

 

为多个客户端

 

import socket


def main():
    # 1. 创建套接字
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 2. 绑定本地信息
    tcp_server_socket.bind(('', 7890))

    # 3. 让默认的套接字变成由主动变为被动的
    tcp_server_socket.listen(128)

    while True:
        print('等一个新的用户的到来。。。')
        # 4. 等待客户端的链接(accept)
        new_tcp_socket, client_addr = tcp_server_socket.accept()
        print('一个新的用户--->%s已经到来。。。' % str(client_addr))

        # 循环同一个用户
        while True:
            # 5. 接收数据
            recv_data = new_tcp_socket.recv(1024)
            print(recv_data.decode('utf-8'))
            if recv_data:
                new_tcp_socket.send('哈哈....ok')
            else:
                break

        # 关闭(先结束新new_socket,然后再结束。具体原理看上面的拓展图)
        new_tcp_socket.close()
        
    tcp_server_socket.close()


if __name__ == '__main__':
    main()

 

 

 

sendto:udp

send:tcp

recv,只有数据。

recvfrom,有数据,且有客户端信息

 

posted on 2020-03-21 22:46  yeyu1314  阅读(121)  评论(0)    收藏  举报