python socket TCP

一、创建

创建一个tcp socket:import socket
#创建tcp连接
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#其中socket.AF_INET代表IPV4的,socket.SOCK_STREAM代表TCP

二、简介

TCP传输控制协议,都是通信的方式与udp的区别是udp是写信的模型,不安全,数据有可能丢失;
TCP是打电话的模型,安全,不是百分之百稳定而是有补救措施即如果发出数据…TCP严格区分客户端和服务器,UDP没有;
客户端流程;我会不想写了;
TCP介绍略

三、TCP客户端

#TCP客户端流程
import socket
from socket import *
def main():
    #创建socket
    tcp_clinet_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #目的信息
    server_ip=input("请输入ip:")
    server_port=int(input("请输入服务器port:"))
    #连接服务器
    tcp_clinet_socket.connect(server_ip,server_port)
    #提示用户输入数据
    send_data=input("请输入要发送的数据:")
    tcp_clinet_socket.send(send_data.encode("utf-8"))
    #接收对方发送过来的数据,最大接收1024个字节
    recvData=tcp_clinet_socket.recv(1024)
    print("接受收到的数据为:",recvData.decode("gdk"))
    #关闭套接字
    tcp_clinet_socket.close()
if __name__=="__main__":
    main()

四、TCP服务器

#TCP服务器流程
import socket
from socket import *
def main():
    #创建socket作用是监听
    tcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #本地信息bind
    address=('',7788)
    #绑定ip和port
    tcp_server_socket.bind(address)
    #使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的链接了
    tcp_server_socket.listen(128)#设置为正常可发接信息状态
    #如果有新的客户端来链接服务器,那么就产生一个新的套接字专门为这个客户端服务
    client_socket,clientAddr=tcp_server_socket.accept()#等待行动相当于停在这里阻塞状态,只要有一个客户端链接到则立马解阻塞
    #接收对方发送来的数据
    recv_data=client_socket.recv(1024)
    print('接到的数据为:',recv_data.decode('gdk'))
    #发送一些数据到客户端
    client_socket.send("thank you!".encode('utf-8'))
    #关闭套接字
    client_socket.close()
    tcp_server_socket.close()
if __name__=="__main__":
    main()

五、循环为多个客户端服务

#TCP循环多客服服务
import socket
from socket import *
def main():
    #创建socket作用是监听
    tcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #本地信息bind
    address=('',7788)
    #绑定ip和port
    tcp_server_socket.bind(address)
    #使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的链接了
    tcp_server_socket.listen(128)#设置为正常可发接信息状态
    while True:
        #如果有新的客户端来链接服务器,那么就产生一个新的套接字专门为这个客户端服务
        client_socket,clientAddr=tcp_server_socket.accept()#等待行动相当于停在这里阻塞状态,只要有一个客户端链接到则立马解阻塞
        while True:#为一个客户端循环服务多次
            #接收对方发送来的数据
            recv_data=client_socket.recv(1024)
            print('接到的数据为:',recv_data.decode('gdk'))
            #发送一些数据到客户端
            client_socket.send("thank you!".encode('utf-8'))
        #关闭套接字
        client_socket.close()
    tcp_server_socket.close()
if __name__=="__main__":
    main()

六、为多个客服端服务

#TCP循环多客服服务
import socket
from socket import *
def main():
    #创建socket作用是监听
    tcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #本地信息bind
    address=('',7788)
    #绑定ip和port
    tcp_server_socket.bind(address)
    #使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的链接了
    tcp_server_socket.listen(128)#设置为正常可发接信息状态
    while True:
        #如果有新的客户端来链接服务器,那么就产生一个新的套接字专门为这个客户端服务
        client_socket,clientAddr=tcp_server_socket.accept()#等待行动相当于停在这里阻塞状态,只要有一个客户端链接到则立马解阻塞
        while True:#为一个客户端循环服务多次
            #接收对方发送来的数据
            recv_data=client_socket.recv(1024)#当recv_data有数据说明解阻塞并发来数据如果为空则说明解阻塞且客户端结束服务
            print('接到的数据为:',recv_data.decode('gdk'))
            if recv_data:#某值或none
                #发送一些数据到客户端
                client_socket.send("thank you!".encode('utf-8'))
            else:
                break
        #关闭套接字
        client_socket.close()
    tcp_server_socket.close()
if __name__=="__main__":
    main()

猜你喜欢

转载自blog.csdn.net/m0_57297999/article/details/129641916