CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

我是VB初学者,用WINSOCK传文件,请各位帮着修改一下程序。(附源程序,并不大)

楼主bladeMG(刀锋)2001-12-22 09:31:06 在 VB / 基础类 提问

程序在传文件长度的时候就传不过去为什么?  
  另外还有什么错误,请各位帮着修改一下,完成后肯定给分。  
  client:  
  Private   Sub   Command1_Click()  
   
  If   wincon.State   <>   0   Then  
      wincon.Close  
  End   If  
  wincon.Connect  
   
  If   wincon.State   <>   0   Then  
      Label1.Caption   =   "连接成功."  
  End   If  
   
  End   Sub  
   
  Private   Sub   Command2_Click()  
  Dim   tfilename   As   String   '传送的文件名  
  Dim   tfilesize   As   Long   '传送的文件大小  
  Dim   lastsize   As   Long   '最后一块的大小  
  Dim   sendi   As   Integer   '发送的次数  
  Dim   inmax   As   Integer   '最大一次传送的字节数  
  Dim   filenum   As   Integer   '打开文件的句柄  
  Dim   filek()   As   Byte   '缓冲数组  
  Dim   filevalue   As   Byte   '当前取出文件当字的二进值  
  Dim   i   As   Integer   '指定数组下标  
  Dim   j   As   Integer   '控制文件传输次数  
  Dim   s   As   Long   '读文件位置  
   
  inmax   =   255  
   
  wincon.SendData   "winsock.txt"  
   
  tfilename   =   filetxt.Text  
  tfilesize   =   FileLen(tfilename)  
  If   tfilesize   <   inmax   Then   '求出最后一块文件大小  
      lastsize   =   tfilesize  
  Else  
      lastsize   =   tfilesize   Mod   (inmax   -   1)  
  End   If  
   
  If   tfilesize   <   inmax   Then   '求出发送的次数  
      sendi   =   1  
  Else  
      sendi   =   Int(tfilesize   /   (inmax   -   1))  
  End   If  
   
  wincon.SendData   tfilesize  
   
  filenum   =   FreeFile  
  i   =   1  
  j   =   1  
  s   =   1  
   
  Open   tfilename   For   Binary   Access   Read   As   #filenum  
  While   Not   EOF(filenum)  
      If   j   <   sendi   Then  
          inmax   =   255  
      Else  
          inmax   =   lastsize  
      End   If  
      ReDim   filek(inmax)   As   Byte  
      If   i   <   inmax   Then  
          Get   #filenum,   s,   filevalue  
          filek(i   -   1)   =   filevalue  
          i   =   i   +   1  
          s   =   s   +   1  
      End   If  
      If   i   =   inmax   Then  
          wincon.SendData   filek  
          i   =   1  
          j   =   j   +   1  
      End   If  
      DoEvents  
  Wend  
  Close   #filenum  
  If   s   >=   tfilesize   Then  
      MsgBox   "文件传输完毕."  
  End   If  
   
  End   Sub  
   
  server:  
  Public   s   As   Long   '写文件的位置  
  Public   tfilename   As   String   '文件名  
  Public   tfilesize   As   Long   '文件大小  
   
  Private   Sub   Form_Load()  
  If   wincon.State   <>   0   Then  
      wincon.Close  
  End   If  
  wincon.Listen  
  s   =   1  
  tfilename   =   ""  
  tfilesize   =   0  
  End   Sub  
   
  Private   Sub   wincon_ConnectionRequest(ByVal   requestID   As   Long)  
  If   wincon.State   <>   0   Then  
      wincon.Close  
  End   If  
  wincon.Accept   requestID  
  If   wincon.State   <>   0   Then  
      Label1.Caption   =   "连接成功。"  
  End   If  
  End   Sub  
   
  Private   Sub   wincon_DataArrival(ByVal   bytesTotal   As   Long)  
  Dim   i   As   Integer   '指示缓冲数组的下标  
  Dim   cs   As   Integer   '指定进行哪种数据接收  
  Dim   filenum   As   Long   '打开文件的句柄  
  Dim   filek()   As   Byte   '缓冲数组  
  Dim   tfilesize   As   Long  
   
  filenum   =   FreeFile  
   
  If   tfilename   =   ""   And   tfilesize   =   0   Then  
      cs   =   1  
  End   If  
  If   tfilename   <>   ""   And   tfilesize   =   0   Then  
      cs   =   2  
  End   If  
  If   tfilename   <>   ""   And   tfilesize   <>   0   Then  
      cs   =   3  
  End   If   '规定接收数据的顺序为:1,文件名.2,文件大小.3,文件内容  
   
   
  Select   Case   cs  
  Case   1  
  wincon.GetData   tfilename  
  tfilename   =   Text1.Text   +   tfilename   '接收文件名,并加上存储路径.  
  Case   2  
  wincon.GetData   tfilesize,   vbLong   '接收文件大小  
  Case   3  
  ReDim   filek(bytesTotal)   As   Byte   '缓冲数组(动态分配大小)  
  Open   tfilename   For   Binary   Access   Write   As   #filenum  
  wincon.GetData   filek,   vbByte   +   vbArray   '接收文件内容  
   
  i   =   1  
  While   i   <=   bytesTotal  
      If   s   <=   tfilesize   Then  
          Put   #filenum,   s,   filek(i   -   1)  
          s   =   s   +   1  
      End   If  
   
      i   =   i   +   1  
      DoEvents  
  Wend  
  If   s   >=   tfilesize   Then  
      tfilename   =   ""  
      tfilesize   =   0  
      s   =   1  
      MsgBox   "文件传输完毕。"  
  End   If  
  Close   #filenum  
  End   Select  
   
  End   Sub  
   
   
  问题点数:35、回复次数:6Top

1 楼bladeMG(刀锋)回复于 2001-12-22 09:42:09 得分 0

请大家帮帮忙吧!Top

2 楼sunyuzhe(sunyuzhe.363.net)回复于 2001-12-22 15:56:37 得分 0

关注upupTop

3 楼soec(龚)回复于 2001-12-22 22:31:08 得分 35

 
  '*****************这是我写的局域网聊天软件的发送文件部分*******************  
  绝对没有BUG   !!!!!  
   
  Public   Sub   SendFile()  
          StopSend   =   2         '2-没有中断信息  
          Open   sendFileName   For   Binary   Access   Read   As   #1  
                  Do  
                          a   =   LOF(1)   -   Seek(1)  
                          ReDim   bytBuffer(IIf(a   >=   iniBufferSize,   iniBufferSize,   a))   '重新定义缓冲区大小  
                          Get   1,   ,   bytBuffer                                     '读取数据  
                          NextOne   =   False   '复位  
                  '**************************************************  
                          Do     '等待对方回应   “继续”  
                                  DoEvents  
                                  Select   Case   StopSend  
                                          Case   0   '自己中断  
                                                  GoTo   f  
                                          Case   1   '接收方中断  
                                                  GoTo   f  
                                          Case   2   '继续传输  
                                  End   Select  
                          Loop   Until   NextOne   =   True   '可以继续发送了  
                  '**************************************************  
                          frmConfrontation.sckData.SendData   bytBuffer     '发送数据  
                          frmSendFile.Caption   =   "文件发送"   &   "     -     已发送"   &   Seek(1)   \   1024   &   "   K"  
                  '**************************************************  
                          Dim   i   As   Integer  
                          For   i   =   1   To   iniSleepTime   '强制减速  
                                  Sleep   1           '***  
                                  DoEvents  
                          Next  
                  '**************************************************  
                          DoEvents         '***  
                  Loop   Until   Seek(1)   >=   LOF(1)  
          frmConfrontation.sckMessage.SendData   "##发送完成"  
  f:  
          Close   #1  
          Erase   bytBuffer   '释放内存  
          Unload   frmSendFile  
  End   Sub  
  Top

4 楼bladeMG(刀锋)回复于 2001-12-23 10:58:15 得分 0

请问楼上的兄台有接收的部分吗?  
  Top

5 楼visualbasic2000(齐谐)回复于 2001-12-23 11:34:58 得分 0

出错信息是什么?Top

6 楼bladeMG(刀锋)回复于 2001-12-23 11:38:19 得分 0

我的程序运行时没有收到文件长度,传过来的长度为0。Top

相关问题

  • ****谁有MD5的vb源程序?
  • 问一个菜问题,如何给自己的VB源程序加上密码,防止被别人修改?大送分!
  • 请问如何修改VB安装制作源程序,使其支持在软件安装完成后,执行软件程序.请指导.QQ:393111355
  • 求一个BCB读,写,修改.ini文件的源程序
  • CRM 源程序(C#),谁要?要帮忙修改喔
  • 请问哪有BIG<->GB转换的VB源程序
  • 找VB写的杀CIH病毒的源程序。
  • 那里有安装打包的vb源程序呢?
  • QA: 如何调试 VB 6 的安装源程序 Setup1.VBP?
  • 冰河用VB也能做吗?有源程序最好哦。

关键词

  • 文件
  • 文件名
  • 中断
  • 数据
  • wincon
  • tfilesize
  • tfilename
  • filek
  • closeend ifwincon
  • 缓冲数组

得分解答快速导航

  • 帖主:bladeMG
  • soec

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo