作为小白,这篇博客是记录尝试了3天,尝试了3,4种办法,写了六七个版本才完成的一段程序(虽然在很多大佬面前只是小菜一碟)。然后想要告诉自己不要被一次又一次的失败打到,通往成功的道路不止一条,这种方法不行就换一种,一种一种地试,在n次失败之后最终会找到成功的路的,最重要的是千万不要在中途放弃了!!!
首先先了解一下什么是TCP协议
TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。在一个TCP连接中,仅有两方进行彼此通信。
(涉及的不多,大概了解一下即可)
好了,言归正传,我们来看一下怎么实现吧。
首先我们得下载第三方模块xlwt和xlrd。这里介绍两种方法:
如果我们的设备没有联网的话,我们得用另一台联网设备上PyPI · The Python Package Index下载第三方模块xlwt和xlrd。
下载完成后用U盘拷到未联网设备中,未联网设备cmd,pip install 安装包文件名+路径。。
如果是已联网的设备,直接打开windows命令符窗口,输入 pip install xlwt回车。
安装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=0n=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()
运行一下看一下效果
搞定。
注意事项:这个表格是一次性的,再用这段程序的时候, 上一次的数据会被覆盖掉。每次生成表格都给重命名即可解决。