作为小白,这篇博客是记录尝试了3天,尝试了3,4种办法,写了六七个版本才完成的一段程序(虽然在很多大佬面前只是小菜一碟)。然后想要告诉自己不要被一次又一次的失败打到,通往成功的道路不止一条,这种方法不行就换一种,一种一种地试,在n次失败之后最终会找到成功的路的,最重要的是千万不要在中途放弃了!!!

首先先了解一下什么是TCP协议

TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。在一个TCP连接中,仅有两方进行彼此通信。

(涉及的不多,大概了解一下即可)

好了,言归正传,我们来看一下怎么实现吧。

首先我们得下载第三方模块xlwt和xlrd。这里介绍两种方法:

如果我们的设备没有联网的话,我们得用另一台联网设备上PyPI · The Python Package Index下载第三方模块xlwt和xlrd。

python 使用tcp发送文件 python tcp发送数据_数据

python 使用tcp发送文件 python tcp发送数据_客户端_02

python 使用tcp发送文件 python tcp发送数据_python_03

python 使用tcp发送文件 python tcp发送数据_python 使用tcp发送文件_04

下载完成后用U盘拷到未联网设备中,未联网设备cmd,pip install 安装包文件名+路径。。

如果是已联网的设备,直接打开windows命令符窗口,输入 pip install xlwt回车。

python 使用tcp发送文件 python tcp发送数据_python_05

安装xlwt,xlrd也是同样操作。

前期都准备好了,可以开始写代码了。

#引入socket、xlwt、xlrd
import socket,time
import xlwt
import xlrd

#本地信息
HOST,PORT ='',4000

#创建socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#绑定
s.bind((HOST,PORT))

#设置服务对象数
s.listen(5)

#等待用户连接
print('Waiting for connection...')

# 使用socket创建的套接字默认的属性是主动的,
# 使用listen将其变为被动的,这样就可以接收别人的链接了
listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

#绑定
listen_socket.bind((HOST, 5000))
listen_socket.listen(5)

#创建一个workbook 设置编码
#增加一页excel表格并命名

#自定义表头,括号对应(行,列,值)[注意行和列都是从0开始的]
#将表格保存在设置好的路径中

#监听端口,若有客户端连接上了就打印 Accept new connection from client
workbook = xlwt.Workbook(encoding = 'utf-8')
worksheet = workbook.add_sheet('test1')

worksheet.write(0,0,'d1')
worksheet.write(0,1,'d2')
worksheet.write(0,2,'d3')
worksheet.write(0,3,'d4')
workbook.save(r"C:\Program Files\excel_test.xls")
i=0

n=1

sock,addr = s.accept()
print('Accept new connection from client')

#接收并打印data(在服务端上显示)
while True:
    data = sock.recv(1024).decode()
   print(data)
    
#打开已创建好的excel
    excel_path='C:\Program Files\excel_test.xls'
    rbook = xlrd.open_workbook(excel_path,formatting_info=True)
    
#写入数据(括号里对应的是行数,列数,要写入的东西)
#这里让列数自增,实现自动输入

#每写一次保存一次
#加个判断,一行写满四个数据就换行
    worksheet.write(n,i,data)
    i+=1
    workbook.save(r"C:\Program Files\excel_test.xls")
    if(i%4==0):
        n+=1
        i=0

#关闭socket,结束进程
sock.close()print('Connection from %s:%client closed.'% addr)

以上就是详细代码以及注释,那么我们搭个简单的客户端来实践一下吧~

以下就是客户端的代码

 import socket
# 1.创建socket
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 2. 链接服务器
server_addr = ("192.168.50.32", 4000)
tcp_socket.connect(server_addr)

# 3. 发送数据
while True:
    send_data = input("请输入要发送的数据:")
    tcp_socket.send(send_data.encode("gbk"))
    if send_data=='quit':
        break
    
# 4. 关闭套接字
tcp_socket.close()

 运行一下看一下效果

python 使用tcp发送文件 python tcp发送数据_数据_06

python 使用tcp发送文件 python tcp发送数据_python_07

python 使用tcp发送文件 python tcp发送数据_TCP_08

 

python 使用tcp发送文件 python tcp发送数据_客户端_09

python 使用tcp发送文件 python tcp发送数据_TCP_10

搞定。

注意事项:这个表格是一次性的,再用这段程序的时候, 上一次的数据会被覆盖掉。每次生成表格都给重命名即可解决。