1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Python tcp编程 TCP服务端和TCP客户端代码编写

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

时间:2024-05-12 22:35:17

相关推荐

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

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"":continueprint("-----------服务端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"":continueprint("-----------客户端start--------")print(data.decode("utf-8"))print("-----------客户端end----------")

右键运行服务端和客户端,运行结果是:

客户端代码:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。