winsock接收rtf文件的问题,高手帮忙!!

czmcjixiangyang 2008-04-21 11:38:56
小弟做了客户端和服务器的程序,是基于winsock的,下面是代码:
客户端:
Private Sub Command1_Click()
Winsock1.RemoteHost = "127.0.0.1"
Winsock1.RemotePort = 3000
Winsock1.Connect

End Sub
Private Sub Command5_Click()
Open "c:\test.rtf" For Binary As #1
Put #1, 1, RichTextBox1.TextRTF
Close #1


Dim a() As Byte
Open "c:\test1.rtf" For Binary As #1
ReDim a(1 To LOF(1))
Get #1, , a
Close #1
Winsock1.SendData a
End Sub

服务器端程序:

Private Sub Form_Load()
Winsock1.LocalPort = 3000
Winsock1.Listen
End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
If Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept requestID
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim a() As Byte
ReDim a(1 To bytesTotal)

Winsock1.GetData a
Open "c:\b.rtf" For Binary As #1
Put #1, 1, a
Close #1
End Sub
现在问题是这个样子的:如果客户端发送的是字符串,在服务端的接收到数据后文件"c:\b.rtf"里面可以看到是正常是文件;如果富文本框RichTextBox1里面包含了图片后,当发送的时候同时保存了该文件的一个副本"c:\test1.rtf",文件和test.rtf一样没区别,但是在服务前端接收的文件"c:\b.rtf"里面显示的很多数字。另外如果发送doc,xls等文件,如果里面含有图片的话,在接收端也显示不出正确的格式来。我该怎么获取原始文件,或者怎么接收使得"c:\b.rtf"文件和原始文件一样。请高手帮忙!!
...全文
55 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
showtong 2008-12-20
  • 打赏
  • 举报
回复
客户端每次发送的数据大小是由限制的,大概是8k,你在发送的时候要把大的文件分块在传送
czmcjixiangyang 2008-04-21
  • 打赏
  • 举报
回复
这个问题对于文本文件没有区别,发送次数多了,自动在后面追加数据,难道doc,xls文件用其他的操作吗?高手请帮忙呀!
czmcjixiangyang 2008-04-21
  • 打赏
  • 举报
回复
现在自己知道问题出来哪了,在服务端接收数据的代码应该改成这个样子
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim a() As Byte
ReDim a(1 To bytesTotal)

Winsock1.GetData a
Open "c:\b.rtf" For Binary As #1
if lof(1)=0 then'''加上
Put #1, 1, a
else'''加上
Put #1, lof(1)+1, a '''加上
end if'''加上
Close #1
End Sub

现在能保存文件了,但是又出了个新的问题,就是如果发送2次数据,接收端的接收到数据后按照上面的程序是要追加到原来的文件后面的,但是实际中,文件的长度确实是增加了,变成了原来的2倍,但是,当打开文件后,文件的内容却没有变化,不知道是怎么回事情,这部分数据到底隐藏到哪了。然而如果在用二进制打开c:\b.rtf这个文件,然后在写到一个c:\bb.rtf文件里面去,显示的内容和c:\test.rtf一样,单是所占的字节数和c:\b.rtf一样。不知道这是怎么回事情,高手帮忙呀!!
在Windows 10或Windows 11操作系统中,用户经常会遇到共享打印机时出现的一系列错误代码,这些错误代码可能会阻碍打印机共享功能的正常使用。常见的错误代码包括0x00000057、0x00000709和0x0000011b,这些代码通常指出了不同的问题,比如权限不足、服务未运行或配置错误等。除此之外,还有一些故障提示如“连接失败”或“内存不足”,这些都可能影响到打印机共享的稳定性。 要解决这些故障,首先要确保打印机已经正确地连接到网络,并且在需要共享的电脑上进行了设置。确保打印机驱动程序是最新的,并且在共享设置中没有错误配置。对于权限问题,需要检查网络上的用户账户是否具有足够的权限来访问共享打印机。同时,也要确保打印机服务正在运行,特别是“Print Spooler”服务,因为这是打印机共享服务的核心组件。 在某些情况下,问题可能与操作系统的更新有关,如升级到最新版的Windows 10或Windows 11后可能出现的兼容性问题。这时,可能需要查看微软的官方支持文档来获取特定的解决方案或更新。 对于错误代码0x00000057,这通常是由于没有足够的权限来访问网络打印机或其共享资源,解决方法是确保网络打印机的权限设置正确,包括在组策略中设置相应的访问权限。而0x00000709错误可能是由于打印机驱动问题或打印机端口配置错误,可以尝试重新安装或更新打印机驱动来解决。至于0x0000011b错误,这往往是因为打印机队列服务的问题,检查并重启“Print Spooler”服务通常是解决这类问题的常见手段。 至于“连接失败”或“内存不足”这类故障,通常与客户端和打印机之间的网络连接以及打印机本地资源的使用情况有关。检查网络连接,确保打印机所在的网络段没有故障或中断。同时,如果打印机的打印队列长时间得不到处理,可能会导致内存不足的情况,这时可能需要清理打印队列或增加打印机的内存配置。 为了帮助用户更快速地解决这些问题,市面上出现了各种打印机共享错误修复工具。这些工具往往通过预设的修复程序来自动检测和修正打印机共享中常见的问题。它们可以快速检查打印机驱动、网络连接以及共享设置,并且能够提供一键修复功能,大幅减少了用户自行排查和解决问题的难度。 然而,在使用这些修复工具之前,用户应确保这些工具的来源是安全可靠的,避免因使用不当的修复工具而引发其他系统安全或隐私问题。用户可以到官方平台或者信誉良好的软件提供商处下载这些工具。通过细心检查打印机的共享设置,及时更新驱动程序和服务,以及合理使用修复工具,大多数共享打印机的问题都可以得到有效的解决。

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧