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----------")
右键运行服务端和客户端,运行结果是:
客户端代码:
阅读全文
0 0
- Python tcp编程,TCP服务端和TCP客户端代码编写
- php编写TCP服务端和客户端程序
- php编写TCP服务端和客户端程序
- TCP 客户端 服务端详细代码
- python TCP客户端服务端通信
- python之TCP客户端和服务器端编写
- tcp服务端和客户端交互
- 简单TCP服务端和客户端
- TCP服务端和客户端(7)
- TCP服务端和客户端(8)
- TCP服务端和客户端(9)
- TCP服务端和客户端测试
- linux下的tcp/udp服务端和客户端编程
- 【转】TCP Socket编程-客户端和服务端双向通信
- java网络编程(二) 客户端和服务端(TCP)
- TCP服务端与客户端
- tcp客户端服务端demo
- TCP-客户端连接服务端
- Android开发中如何设置字体
- 【PAT】【Advanced Level】1014. Waiting in Line (30)
- sort
- POJ1731 Orders【全排列+字符串排序】
- 第十二周 leetcode 207. Course Schedule(Medium)
- Python tcp编程,TCP服务端和TCP客户端代码编写
- Guide for camera usage in DB410c(1)
- REDIS (13) 并发使用Jedis原理分析
- 设计模式-行为型软件设计模式(四)
- 在Linux系统部署InfluxDB
- FZUOJ 2250 不可能弹幕结界【BFS】
- 光栅图形学算法——裁剪算法
- 设计模式-行为型软件设计模式(五)
- 前端的拖拽操作