TCP-客服端与服务端

TCP介绍

TCP协议,传输控制协议,是一种面向连接的,可靠的,基于字节流的传输层通信协议
TCP通信需要经过创建连接,数据传送,终止连接三个步骤
TCP通信模型中,在通信开始之前,一定要先建立相关连接,才能发生数据

TCP特点:
1.面向连接
通信双方必须先建立连接才能进行数据的传输
2.可靠传输
TCP采用发送应答机制
超时重传
错误校验
流量控制和阻塞管理

TCP与UDP区别
1.TCP面向连接,UDP是无连接的,即发送数据之前不需要建立连接
2.TCP提供可靠的服务,也就是说能过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付;
3.UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5.TCP对系统资源要求较多 UDP对系统资源要求较少

UDP客户端–>soket()–>sendto()–>recvfrom()–>close()

UDP服务器–>soket()–>bind()–>recvfrom()–>sendto()

UDP客户端–>recvfrom()–>sendto()–>UDP服务器–>sendto()-一直阻塞到收到客服端数据 处理请求->recvfrom()–>sendto()
–>UDP客户端recvform()–>sendto()–数据(发送)–UDP服务器

在这里插入图片描述

Tcp客户端–>socket()–>connet()–>write()–>read()–>close()

Tcp服务器–>socket()–>bind()–>listen()–>accept()–>read()–>write()–>close()
在这里插入图片描述
TCP客户端
#服务器端:就是提供服务的一方 而客户端就是需要被服务的一方

TCP客户端构建流程
1.创建socket
2.链接服务器
3.接收数据(最大接收2014个字节)
4.关闭套接字

import socket
# from socket import *

def main():
    # 创建TCP套接字
    tcp_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # tcp_client = socket(AF_INET,socket.SOCK_DGRAM)
    server_ip = input("server_ip:")
    server_port =int(input("server_port:"))
    # 连接服务器
    tcp_client.connect((server_ip,server_port))
    while True:
        # 发送数据
        send_data = input("发送的数据:")
        tcp_client.send(send_data.encode('gbk'))
        # 接收数据 阻塞
        recvdata = tcp_client.recv(1024)
        print(recvdata.decode('gbk'))

    tcp_client.close()


if __name__ == '__main__':
    main()

TCP服务端
1.socket创建套接字
2.bind绑定IP和port端口
3.listen使用套接字变为可以被动链接
4.accept等待客户端的链接
5.recv/send接收发达数据

import socket

def main():
    tcp_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    tcp_server.bind(("192.168.1.2",7890))

    # 主动变被动
    tcp_server.listen(128)

    # accept() -> (socket object, address info) 返回套接字和ip地址

    new_client_socket,client_addr = tcp_server.accept()
    # print(client_addr)

    # 接收数据
    recv_data = new_client_socket.recv(1024)
    print(recv_data.decode('gbk'))

    # 发送数据
    new_client_socket.send('haha'.encode('gbk'))

    new_client_socket.close()
    tcp_server.close()



if __name__ == '__main__':
    main()

TCP服务端为多个客户端服务

import socket

def main():

    tcp_server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    tcp_server.bind(("192.168.65.1",7890))
    # 为多个服务端服务 服务暂时只能是一次,如何服务多次?
    while True:
        # 主动变被动
        tcp_server.listen(128)

        # accept() -> (socket object, address info) 返回套接字和ip地址

        new_client_socket,client_addr = tcp_server.accept()
        # print(client_addr)
        while True:
            # 接收数据 阻塞
            recv_data = new_client_socket.recv(1024)
            # print(recv_data)
            # 客户端发送过来数据
            # 客户端断开连接
            if recv_data.decode('gbk'):
                # 发送数据
                new_client_socket.send('haha'.encode('gbk'))
            else:
                break
        new_client_socket.close()

    tcp_server.close()




if __name__ == '__main__':
		main()

在这里插入图片描述

发布了106 篇原创文章 · 获赞 0 · 访问量 2382

猜你喜欢

转载自blog.csdn.net/weixin_45905671/article/details/105321722