Python tcp传输代码实例解析

socket是编程语言对tcp/ip协议的封装,使用其可以在两个主机之间传输文件,下面直接进入主题,下面示例是最简单的tcp传输代码示例,先启动server再启动client。需要注意python3socket只能传输byte类型,具体如何转换可以复习字符编码章节相关知识

sever端代码

# -*- coding:utf-8 -*-
import socket
server = socket.socket()
server.bind(("0.0.0.0", 8888))
server.listen(10)
while True: #循环监听连接过来的客户端
  conn,addr = server.accept()
  while True: #每个客户端连接过来以后持续交互,当客户端端断开后在和下一个客户端交互
    try:
      rec_data = conn.recv(4096) #4096接收缓冲区大小
      if len(rec_data) == 0:
        break
      print("rec_data:", rec_data.decode(encoding="utf-8"))
      conn.send(rec_data.upper())
    except ConnectionResetError as e:
      print("一个客户端关闭了连接")
      break
server.close()

client端代码

import socket
client = socket.socket()
client.connect(("127.0.0.1", 8888))
while True:
  msg = input()
  if len(msg) == 0:
    continue
  client.send(msg.encode(encoding="utf-8")) #如果发送中文需要对其进行encode,接收也需要decode;英文前面直接加b指定类型
  client_rec = client.recv(4096)
  print("client_rec:", client_rec)
client.close()

粘包解决方法:对于两条紧挨的send语句,会存在上一条send的内容与下一条send的内容混在一起的情况,这个是因为send只是将数据发送给os,具体os如何发送数据无法控制,使用下面方法能够解决两条send语句之间发送报文粘包问题

server端代码

import socket, os
server = socket.socket()
server.bind(("0.0.0.0", 8888))
server.listen(10)
while True: #循环监听连接过来的客户端
  conn,addr = server.accept()
  while True: #收到客户端发过来的get filename如果filename存在就将文件发出否则返回文件不存在
    try:
      rec_data = conn.recv(1024) #4096接收缓冲区大小
      if len(rec_data) == 0:
        break
      rec_str_list = rec_data.decode(encoding="utf-8").split(" ")
      filename = rec_str_list[-1]
      if os.path.isfile(filename):#判断文件在当前路径下存在句将文件传给客户端
        file_data = open(filename,encoding="utf-8").read()
        conn.send(str(len(file_data)).encode(encoding="utf-8")) #将文件长度传给客户端
        print(conn.recv(1024).decode(encoding="utf-8")) #客户端收到文件长度返回确认信息,server收到确认信息后再开始传送数据
        conn.sendall(file_data.encode(encoding="utf-8"))#将数据全部发个客户端,客户端判断数据接收完成后发送接收完成的信息
        print(conn.recv(1024).decode(encoding="utf-8")) #接收客户端接收完成的确认指令,避免两个send直接连在一起产生粘包
      else:#如果文件名不存在则返回文件不存在
        conn.send(b"file is not exit")
    except ConnectionResetError as e:
      print("一个客户端关闭了连接")
      break
server.close()

client端代码

import socket, os
#输入get 文件名,当文件存在server家目录下则返回文件,客户端将接收文件内容并打印,
client = socket.socket()
client.connect(("127.0.0.1", 8888))
while True:
  msg = input()
  if len(msg) == 0:
    continue
  client.send(msg.encode(encoding="utf-8")) #如果发送中文需要对其进行encode,接收也需要decode;英文前面直接加b指定类型
  client_rec = client.recv(1024).decode(encoding="utf-8")
  print("client_rec", client_rec)
  if client_rec == "file is not exit": #如果文件不存在则用户打印文件不存在,用户继续输入
    print(client_rec)
    continue
  client.send(client_rec.encode(encoding="utf-8"))#文件存在则将文件大小发回去
  rec_len = int(client_rec)
  print("rec_len", rec_len)
  file_len = 0
  new_file = open("new_file","a",encoding="utf-8")
  while file_len < rec_len:#开始循环接收文件直到接收的文件大小与server端发过来的大小一样,将接收到的数据写入新文件
    rec_data_tmp = client.recv(1024)
    file_len += len(rec_data_tmp)
    print("receive date len", file_len)
    new_file.write(rec_data_tmp.decode(encoding="utf-8"))
  client.send("receive all".encode(encoding="utf-8"))

client.close()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python中的TCP(传输控制协议)用法实例分析

    本文实例讲述了python中的TCP(传输控制协议)用法.分享给大家供大家参考,具体如下: 1.TCP与UDP的不同: windows网络调试助手下载:https://pan.baidu.com/s/1IwBWeAzGUO1A3sCWl20ssQ 提取码:68gr 或者点击此处本站下载. 面向连接(确认有创建三方交握,连接以创建的传输) 有序数据传输 重发丢失的数据包 舍弃重复的数据包 无差错的数据传输 阻塞/流量控制 2.客户端: import socket def main(): # 创建套

  • python使用socket实现的传输demo示例【基于TCP协议】

    本文实例讲述了python使用socket实现的传输demo.分享给大家供大家参考,具体如下: socket传输,客户端代码 import socket def main(): tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 服务器位于本机 9999 tcp_client_socket.connect( ("192.168.27.72", 9999) ) # 告诉服务器,我要下载哪一个文件

  • python3基于TCP实现CS架构文件传输

    本文实例为大家分享了python3实现CS架构文件传输的具体代码,供大家参考,具体内容如下 1.目标: 基于tcp实现CS架构的文件传输 指令列表:(1)get:从服务器端下载文件 (2)put:向服务器端上传文件 (3)list:获得服务器端的目录 2.socket模块函数: (1)send和sendall:send的作用是发送TCP数据,返回发送的数据大小.send函数不保证将所有数据全部发送,因此可能需要重复多次才能完成所有数据的发送.sendall的作用是发送完整的TCP数据,成功时返回

  • python使用tcp实现局域网内文件传输

    本文为大家分享了python使用tcp实现局域网内文件传输的具体代码,供大家参考,具体内容如下 功能: 可以利用python创建的TCP客户端从我们自己搭建的TCP服务器上下载文件. 实现需求: 安装socket模块 简单了解sokcet模块用法 服务器代码如下: import socket def file_deal(file_name): # 定义函数用于处理用户索要下载的文件 try: # 二进制方式读取 files = open(file_name, "rb") mes = f

  • python3.5基于TCP实现文件传输

    本文实例为大家分享了python3.5基于TCP实现文件传输的具体代码,供大家参考,具体内容如下 服务器代码 # _*_ coding:utf-8 _*_ from socket import * import _thread def tcplink(skt,addr): print(skt) print(addr,"已经连接上...") print('开始发送文件') with open('./ww.jpg', 'rb') as f: for data in f: print(dat

  • Python网络编程之使用TCP方式传输文件操作示例

    本文实例讲述了Python网络编程之使用TCP方式传输文件操作.分享给大家供大家参考,具体如下: TCP文件下载器 客户端 需求:输入要下载的文件名,从服务器端将文件拷贝到本地 步骤: 1.创建TCP套接字,绑定端口 2.连接服务端 3.输入要下载的文件名 4.将文件名编码,并发送到服务端 5.接收服务端返回的数据 6.关闭套接字 代码 # 导入模块 import socket # 创建套接字 tcp_client_socket = socket.socket(socket.AF_INET, s

  • 对python中基于tcp协议的通信(数据传输)实例讲解

    阅读目录 tcp协议:流式协议(以数据流的形式通信传输).安全协议(收发信息都需收到确认信息才能完成收发,是一种双向通道的通信) tcp协议在OSI七层协议中属于传输层,它上承用户层的数据收发,下启网络层.数据链路层.物理层.可以说很多安全数据的传输通信都是基于tcp协议进行的. 为了让tcp通信更加方便需要引入一个socket模块(将网络层.数据链路层.物理层封装的模块),我们只要调用模块中的相关接口就能实现传输层下面的繁琐操作. 简单的tcp协议通信模板:(需要一个服务端和一个客户端) 服务

  • Python tcp传输代码实例解析

    socket是编程语言对tcp/ip协议的封装,使用其可以在两个主机之间传输文件,下面直接进入主题,下面示例是最简单的tcp传输代码示例,先启动server再启动client.需要注意python3socket只能传输byte类型,具体如何转换可以复习字符编码章节相关知识 sever端代码 # -*- coding:utf-8 -*- import socket server = socket.socket() server.bind(("0.0.0.0", 8888)) server

  • Python随机数函数代码实例解析

    这篇文章主要介绍了Python随机数函数代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 ''' choice(seq) 从序列的元素中随机选出一个元素 randrange ([start,] stop [,step]) 从指定范围内,在指定步长递增的集合中 获取一个随机数,步长默认为 1 .注:不包含 stop 值 random() 随机生成下一个实数,它在[0,1)范围内. shuffle(lst) 将序列的所有元素随机排序,返回

  • python 表格打印代码实例解析

    编写一个名为printTable()的函数,它接受字符串的列表的列表,将它显示在组织良好的表格中,每列右对齐.假定所有内层列表都包含同样数目的字符串.例如,该值可能看起来像这样: table_data = [['apples', 'oranges', 'cherries', 'banana'], ['Alice', 'Bob', 'Carol', 'David'], ['dogs', 'cats', 'moose', 'goose']] 你的 printTable()函数将打印出: apples

  • Python解析json代码实例解析

    这篇文章主要介绍了Python解析json代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 什么是json格式: JSON(JavaScript Object Notation):一种轻量级数据交换格式,相对于XML而言更简单,也易于阅读和编写,机器也方便解析和生成,Json是JavaScript中的一个子集. import json data = { "statusCode": 200, "data":

  • Python list运算操作代码实例解析

    这篇文章主要介绍了Python list运算操作代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在操作list的时候,经常用到对列表的操作运算,比如说,列表添加,删除操作,其实,这里面经常回遇到这样一个问题,就是列表的操作容易被混淆了. 有人做了一个总结,这个很清晰,我就不多做阐述了: 1.append() 向列表尾部追加一个新元素,列表只占一个索引位,在原有列表上增加 2.extend() 向列表尾部追加一个列表,将列表中的每个元

  • Python hmac模块使用实例解析

    这篇文章主要介绍了Python hmac模块使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 hmac模块的作用: 用于验证信息的完整性. 1.hmac消息签名(默认使用MD5加算法) hmac_md5.py #!/usr/bin/env python # -*- coding: utf-8 -*- import hmac #默认使用是md5算法 digest_maker = hmac.new('secret-shared-key'.

  • Python元字符的用法实例解析

    反斜杠的作用: 要想将一个元字符^当一个普通字符处理,加反斜杠 例如: >>>import re >>>r=r'\^abc' >>>re.findall(r,'^abc ^abc ^abc') ['^abc','^abc','^abc'] \d匹配任何十进制数,它相当于类[0-9]. \D匹配任何非数字字符,它相当于类[^0-9] \s匹配任何空白字符,他相当于类[\t\n\r\f\v] \S匹配任何非空白字符,它相当于类[^\t\n\r\f\v] \

  • python如何重载模块实例解析

    本文首先介绍了Python中的模块的概念,谈到了一个模块往往由多个模块组成,然后通过具体实例,分析了模块重载的相关内容,具体介绍如下. 模块是Python程序架构的一个核心概念,较大的程序往往以多个模块文件的形式呈现,一个模块被设计成主文件或顶层文件,用来启动整个Python程序.每个以.py为后缀的Python源代码文件都是一个模块,其他文件可通过"导入"读取这个模块的内容.从一般意义上讲,模块就是变量名的封装.如写一个模块test.py,包含一个两个变量名name.age. nam

  • Python中property属性实例解析

    本文主要讲述的是对Python中property属性(特性)的理解,具体如下. 定义及作用: 在property类中,有三个成员方法和三个装饰器函数. 三个成员方法分别是:fget.fset.fdel,它们分别用来管理属性访问: 三个装饰器函数分别是:getter.setter.deleter,它们分别用来把三个同名的类方法装饰成property. fget方法用来管理类实例属性的获取,fset方法用来管理类实例属性的赋值,fdel方法用来管理类实例属性的删除: getter装饰器把一个自定义类

  • Python argparse模块应用实例解析

    这篇文章主要介绍了Python argparse模块应用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 简介 argparse是python用于解析命令行参数和选项的标准模块.argparse模块的作用是用于解析命令行参数. 使用步骤 1.首先导入该模块 2.然后创建一个解析对象 3.然后向该对象中添加你要关注的命令行参数和选项,每一个add_argument方法对应一个你要关注的参数或选项 4.最后调用parse_args()方法进行

随机推荐