Python tcp编程,TCP服务端和TCP客户端代码编写

来源:互联网 发布:linux 加载u盘 编辑:程序博客网 时间:2024/05/20 06:08

Python网络编程
两种模式:
一种tcp可靠连接,能够保证数据不丢失
一种udp 不关心数据是否会丢失,在乎传输效率

TCP编程
一点:服务端
二点:客户端

客户端如何连接服务端,保证传输的数据可靠呢?
这里写图片描述

第一次握手:客户端发送报文,连接服务端
第二次握手:服务端发送报文,你可以连接
第三次握手:客户端发送确认报文,我真的要连接

服务端的编写:
java:socketServer(ip,port)
Python:socket.socket()

1、创建socket.socket()2、绑定地址和端口号3、监听客户端请求4、接受客户端的请求,并为之开辟一个线程来处理它的业务逻辑知识点:socket 网络通信的基本知识

tcp的服务端和客户端的案例
服务端:

"""1、创建 socket.socket()2、绑定地址和端口号3、监听客户端请求4、接受客户端的请求,并为之开辟一个线程来处理他的业务逻辑。"""import socket#一、创建socket.socket()#下面讲的是family#family         :地址族,也就是IP地址类型,常用的IP地址类型有两种:AF_INET,AF_INET6#AF             :Address Family#INET           :Inetnet的缩写#AF_INET        :默认是IPv4#AF_INET6       :IP6的缩写#family=AF_INET,type=SOCK_STREAM,proto=0#type:#type是表示的数据传输的方式#type=SOCK_STEAM        :面向连接传输方式,数据可以准去到达另外一台机器,如果数据丢失就会重发,效率相对比较低#type=SOCK_DGRAM        :表示无连接的传输方式,计算机只管传输数据,不做数据校验,相对快。#@@使用的是SOCK_DGRAM这种方式。#proto:#传输协议:一般都有TCP,UDP#下面创建的是IPV4的服务import threadingimport timedef run(sock, addr):    print(addr)    sock.send("接收到消息,开始运行.....".encode('utf-8'))    while True:        data =sock.recv(1024)        if data == b"":            continue        print("-----------服务端start--------")        print(data.decode('utf-8'))        print("-----------服务端end--------")        value = data.decode('utf-8');        #str转成bytes的两种方式        #(1)直接通过str.encode("utf-8")的方式        #(2)通过创建bytes("字符串")对象来得到比特数组        sock.send((value+value).encode('utf-8'))socket_server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)#二、绑定地址和端口号socket_server.bind(("127.0.0.1",8888))#三、监听客户端请求socket_server.listen()#四、接受客户端的请求,并为之开辟一个线程来处理它的业务逻辑#不停的循环,问有没有请求while True:    #接收一个请求    #sock    是网路通道   用来读写数据    #addr    是客户端ip地址    (sock,addr) = socket_server.accept()    #创建线程    thread = threading.Thread(target=run,name="线程",args= (sock, addr))    #启动线程    thread.start()

客户端:

"""1、创建一个socket连接,得到一个client端2、连接服务器 知道服务器的ip地址和端口号3、获取数据,并打印出来"""import socket#1、创建一个socket连接,得到一个client端import timesocket_client = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)#2、连接服务器 知道服务器的ip地址和端口号socket_client.connect(("127.0.0.1",8888))data = socket_client.recv(1024)# 将字节数组转换成 字符串的两种方式# 1,在服务端发送数据的时候,可以将将字符串转成bytes#(1):调用对象的 str.encode('utf-8')#(2): bytes(value,encoding="utf-8")# 2,在客户端接受数据的是,将bytes转成字符串#(1)调用对象的 str.decode('utf-8')#(2)str(data,encoding='utf-8')print(data.decode("utf-8"))print(str(data,encoding="utf-8"))#发送数据到服务端,发过去之后,在tcp_server.py中又,重新发过来,在客户端又接收到for item in ["aaaa","bbbbbbbbbbbbbb","ccccccccccccccc","发送一下数据"]:    time.sleep(1)    socket_client.send(item.encode("utf-8"))while True:    data = socket_client.recv(1024)    if data == b"":        continue    print("-----------客户端start--------")    print(data.decode("utf-8"))    print("-----------客户端end----------")

右键运行服务端和客户端,运行结果是:
这里写图片描述

客户端代码:
这里写图片描述

原创粉丝点击