说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

高手来找茬,高分等你拿~

编辑:说三道四文库 发布时间:2017-12-12 04:48
HTML文档下载 WORD文档下载 PDF文档下载

偶用VB的winsock想编一个语音传输的东东,结果调试了好久不能通过,希望各位高手帮忙找找错误,
偶把程序最主要的部分帖出来,大家帮忙看看,先谢了~
给分原则:提意见10分,找到一个错误20分(并帮忙改正30分),有更好的代码40分(错误或代码请说得详细些)

-----------------
服务器端
-----------------
Option Explicit

'初始化
Private Sub Form_Load()
TcpS.LocalPort = 1801 '设置端口         ’TCPS为服务器端winsock控件
TcpS.Listen   '监听

'响应连接
Private Sub TcpS_ConnectionRequest(ByVal requestID As Long)
 If TcpS.State <> sckClosed Then TcpS.Close
 TcpS.Accept requestID
End Sub

'文件接收
Private Sub TcpS_DataArrival(ByVal bytesTotal As Long)
Dim flen As Long
Dim myfile As Byte
TcpSLen.GetData flen          'TcpSLen为接受文件长度的winsock控件
Open "d:\hello.wav" For Binary As #2
Do While (LOF(2) < flen)     '判断文件是否读完
TcpSFile.GetData myfile      '接受文件
Put #2, , myfile             '按字节字节写入目标文件
Loop
Close #2
 MsgBox "文件传送完毕!"
End Sub

Private Sub Form_Unload(Cancel As Integer)
TcpSLen.close
TcpS.Close
End Sub

Private Sub TcpS_Close()
If TcpS.State <> sckClosed Then TcpS.Close
  MsgBox "服务器通道已关闭!"
  End
End Sub

Private Sub TcpS_Connect()
  MsgBox "连接成功!"
End Sub


-------------------------
客户端
-------------------------
'初始化
Private Sub Form_Load()
TcpC.RemoteHost = "wp"              'TcpC为客户端winsock控件
TcpC.RemotePort = 1801
TcpC.LocalPort = 1802
TcpC.RemoteHostIP = TcpC.LocalIP          '在同一个机器里运行,测试时服务器和客户端IP相同
CommonDialogC.FileName = "*.wav"
End Sub

Private Sub Form_Unload(Cancel As Integer)
TcpC.Close
TcpCLen.Close
End Sub

'建立连接
Private Sub CmdConnect_Click()
TcpC.Connect
On Error GoTo TransferError
CState.Caption = "连接中..."
TransferError:
MsgBox "服务器未开或网络出错!"
End
End Sub

'接收文件
Private Sub CmdSoundSend_Click()
Dim myfile As Byte
Dim flen As Long
Open "d:\hi.wav" For Binary As #1
flen = LOF(1)         '文件长度
TcpCLen.SendData (flen)  '接受文件长度的winsock控件
Do While Not EOF(1)  '判断是否到达文件末尾
Get #1, , myfile     '按字节读文件
TcpCFile.SendData myfile '按字节传文件
Loop
Close #1
 MsgBox "传送完毕!"
End Sub

Private Sub TcpC_Close()
 MsgBox "服务器通道已关闭!"
  End
End Sub

Private Sub TcpC_Connect()
  MsgBox "连接成功!"
End Sub

-----------------------------------


问题1:不能实现传输,连接不成功

问题2:服务器端在VB里只能运行一次,第二次运行就死了,将TcpS.Listen注释掉就好了,
怀疑是winsock控件的问题,但是关闭FORM时确实执行了Tcps.close,不解?(客户端没有这种情况!)

问题3:服务器端的TcpSLen是否也可用TcpS控件代替,这样传数据时会不会乱?

问题4:如果加上文本聊天等功能,数据传输是否都可用一个winsock控件,怎么解决?
如果文件传输和文字传输各单独用一个winsock控件是否初始化时都要设置端口,建立监听等?

问题5:文字聊天的代码,加进去有没有错?
'发送文本信息
Private Sub CmdSend_Click()
TcpCTxt.SendData TxtSend.Text
End Sub
'接受文本信息
Private Sub TcpC_DataArrival(ByVal bytesTotal As Long)
Dim TxtDate As String
TcpC.GetData TxtDate
TxtReceive.Text = TxtDate
End Sub

问题6:这个程序主要用来传语音,这种编码是否不妥?谁有更好,效率更高的代码?
'附传输文件的另一种编码
 Dim i, j, flen As Long
   flen = FileLen(CommonDialogC.FileName)
    For i = 0 To flen \ 4000
    If flen < 4000 Then
     ReDim myfile(1 To flen) As Byte
       Open CommonDialogC.FileName For Binary As #1
       Get #1, i * 4000 + 1, myfile
       Close #1
       TcpCFile.SendData myfil
     Else
       ReDim myfile(1 To flen) As Byte
       Open CommonDialogC.FileName For Binary As #1
       Get #1, i * 4000 + 1, myfile
       Close #1
       TcpCFile.SendData myfil
      flen = flen - 4000
    End If
 Next i

★问题7:在这个基础上,如何实现语音的实时传输(像电话一样发送端边录边传,接收端边收边放)
   或者简单一点发送端录完就传,接收端收完就放
-----------------------
高手来找茬,高分等你拿~
up
,,
这么多问题??
给你一段代码,功能和你的完全一样。
server端:
drive、dir、command、winsock各一个
winsock  名称:wstcp

Option Explicit

Dim lPos As Long

Private Sub cmdRun_Click()
  If cmdRun.Caption = "Run" Then
    cmdRun.Caption = "Stop"
    wsTCP(0).LocalPort = 1111
    wsTCP(0).Listen
  Else
    wsTCP(0).Close
    cmdRun.Caption = "Run"
  End If
End Sub

Private Sub Drive1_Change()
  Dir1.Path = Drive1.Drive & "\"
End Sub

Private Sub wsTCP_Close(Index As Integer)
  Close #1
  Unload wsTCP(1)
End Sub

Private Sub wsTCP_ConnectionRequest(Index As Integer, ByVal requestID As Long)
  Load wsTCP(1)
  wsTCP(1).Accept requestID
  If Dir(Dir1.Path & "\temp") <> "" Then Kill Dir1.Path & "\temp"
  Open Dir1.Path & "\temp" For Binary As 1
  lPos = 1
End Sub

Private Sub wsTCP_DataArrival(Index As Integer, ByVal bytesTotal As Long)
  Dim buffer() As Byte
  wsTCP(1).GetData buffer
  Put #1, lPos, buffer
  lPos = lPos + UBound(buffer) + 1
End Sub
============================================================
client端

Option Explicit

Dim buffer() As Byte
Dim lBytes As Long

Private Sub cmdBrowse_Click()
  dlg.ShowOpen
  txtFile = dlg.FileName
End Sub

Private Sub cmdSend_Click()
  cmdSend.Enabled = False
  lBytes = 0
  ReDim buffer(FileLen(dlg.FileName) - 1)
  Open dlg.FileName For Binary As 1
  Get #1, 1, buffer
  Close #1
  Load wsTCP(1)
  wsTCP(1).RemoteHost = "172.16.1.17"
  wsTCP(1).RemotePort = 8896
  wsTCP(1).Connect
  lblStatus = "Connecting..."
End Sub

Private Sub wsTCP_Close(Index As Integer)
  lblStatus = "Connection closed"
  Unload wsTCP(1)
End Sub

Private Sub wsTCP_Connect(Index As Integer)
  lblStatus = "Connected"
  wsTCP(1).SendData buffer
End Sub

Private Sub wsTCP_SendComplete(Index As Integer)
  lblStatus = "Send complete"
  Unload wsTCP(1)
  cmdSend.Enabled = True
End Sub

Private Sub wsTCP_SendProgress(Index As Integer, ByVal bytesSent As Long, ByVal bytesRemaining As Long)
  lBytes = lBytes + bytesSent
  lblStatus = lBytes & " out of " & UBound(buffer) & " bytes sent"
End Sub
这个代码可以让服务端运行后,客户可以多次传送。
如果要实现类似于聊天的功能,建意先在一新的程序里写,很简单
www.dapha.net上也有很多代码。
谢了!
学习winsock
《原码空间》上有例子

http://www.playicq.com/
传输部分?


俺对语音时实时压缩及解压部分感兴趣!
jQuery右键菜单(Context Menu)插件 创建vpn服务器解决远程接入的问题 用JQuery插件轻松实现accordion折叠菜单 用VBA为EXCEL文件加个登录对话框 Android模拟器入门 Android GSM驱动模块详细分析 农行网上在线支付平台接口安装详解 Android开发中实现跨进程通讯的AIDL接口 用CSS样式展现可打印页面 Android搭建NDK开发环境 VC++、MFC最好的开源项目 Android中电话和短信服务的包分析 一位Android开发者的赚钱经历 让网页中的图片随屏幕滚动,并避免与文字重叠 Hello bat - DOS BAT批处理编程入门教程(一) 变量 - DOS BAT批处理编程入门教程(二) Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面 程序流程控制基础 - DOS BAT批处理编程入门教程(四) For循环语句详解 - DOS BAT批处理编程入门教程(五) Android编程之实现GPS定位 android编程实现仿iphone的tab效果 系统变量 - DOS BAT批处理编程入门教程(三) Android编程获取手机的IMEI Android开发中14个很有用的编程技巧 Android蓝牙栈bluez使用方法 Android模拟GPS数据生成kml和nmea文件 Android签名用keytool和jarsigner制作apk文件 谈谈Android中文短信的实现 Android中文短信开发技巧 Android来电号码获取代码 Android AIDL初学者必看内容 100询问:修改boot.ini仍无法实现双重启动. websphere的问题(1)? 我是第一次使用域.为什么无法在域控制器里增加用户?help me! 求助:模板的连接问题 strust 请问:哪里有人民邮电出版社的《个体软件工程》下载 ?(有分送) 存储过程执行出错,请帮忙看看!急! 请问:在sybase中的设备大小的设定,有没有一个标准?? include问题,屡试屡败 请问怎么才能用最简单的方法把程序做成服务? 程序设计文档怎么写啊?求教 不好意思,一个简单的问题 websphere的问题(2)? 请问如何实现模式窗口,就是当打开子窗口主窗口不能操作,除非关闭子窗口,如果有这样的网页也行 关于清华出版社出版的“微软.NET程序设计系列”之《ADO.NET程序设计》的问题,大家来讨论一下 如何用程序实现光驱的弹入弹出? 在线等了,各位帮忙了!! 我运行了一个网络管理软件出现乱码?而别的程序都没有乱码? 对话框上面显示视图,怎么办? 一道四级题有一点不明白的地方,谢谢各位高手帮我解决一下困惑。。 websphere的问题? 在一个对话框CDialog类中访问窗体视图类CFormView中的函数发生错误? 有关简繁体转换的问题 怎么分离这个字符串 aa|bb|cc|dd| ASP连接Oracle9i的连接字符串是什么? 请教:EXCEL中使用VB进行串口编 websphere的问题(4)? 如何在自己写的类的属性、方法在被使用的时候显示一些相关信息? 高分:大侠们,帮我看一下这个设计思路对吗?(在线等待!) 初级问题:请问用ASP开发BS结构程序,应该选什么工具啊 请教各位pb的可执行程序的分发 我运行了一个网络管理软件时 这个软件显示的信息是乱码?而别的程序都没有乱码? 多谢awpking ,请进给你洒分. asp里调ActiveX控件,客户端却不能用,请帮助解决,100分相送。 如何让两个网段的电脑互相访问 在线等!打开文档的问题! HtmlHelp用法问题。急急!!1 只有在这问,关于笔记本网卡的驱动程序 我运行了一个网络管理软件时 这个软件显示的信息是乱码?而别的程序都没有乱码? 菜鸟的问题,大虾解决 本地安全策略打不开,怎么解决? 高分求教,如何让asp.net生成的网页转为pdf输出,在线等待 求救:用JMail发送邮件,用IIS的SMTP虚拟服务器,邮件都堵在Queue目录里发不出去 时间问题 在线等待 !!!没分啦!以后报答!! 为何执行int n=str.GetLength()后,n为0??? 急寻《基于XML电子公文格式规范》 初学 关于datagrid的问题 讨论用例分析技术 .net被我安在D盘,D盘下有一个WINNT目录被我删了,.NET就起不来了,我的系统在C盘 怎样删除表中的重复数据,急!! 居里夫人的三克镭分别有着怎样的由来?请简洁概括 居里夫人的三克镭分别有着怎样的由来,请简要概括 所爱隔山海山海不可平甚么意思 ()海()天 ( )海( )天怎么写 已知lim x趋近于无穷(x+a/x-a)的x次方等于9,求常数a给个思路,求别给我写符号因为我实在看不懂 用语言叙述下好吗 我尽量理解 吧长方体截去一个角,剩下的几何体最多有( )个面? 简述马克思主义中国化的历史进程和形成的理论成果? 论述马克思主义的形成与发展1000字以上 把一个长方体截去一个角,剩下的几何体最多有几个面 紧急 试概述马克思主义在中国传播所产生的重大影响 洪航勇任杭州市人大常委会代理主任(图美辱华主持人回应华人起诉:他们愿浪费国际刑事法院推迟审理肯尼亚总统案美国航班飞行中将允许使用部分电子设备10月份国际大事回顾:美联邦政府关门奥巴马喊话投资者“选择美国”摄像师探寻日本平凡之美东京博物馆特别展 揭秘日本封建末期神万圣节狂欢化装派对 萌“小鬼”们惹人多伦多市长涉吸毒视频被查获 其友涉嫌西班牙走出两年经济衰退 首次出现经济直升机坠入密云水库 两人身亡德国用军火为申办世界杯拉票红会名誉会长改由“国家领导人”担任京津第二条城际高铁有望年内开工《一百零九个春天:我的故事》米兰出售48%股份体系化监督欲为 国企混改上保险考纪升级 监考老师今年须集体离场北京城区天气北控主场不敌“领头羊”南海,究竟谁在“肘击”百宝盒穿越之我到幻想乡了妖精的尾巴之死灵法师奇点星空来自异世界的幽灵仙凡祭天地变归元末日由我行那一年与你的相遇梦想萌战记逆神则犀牛峰旅游合掌峰旅游朝阳嶂旅游雁荡山烈士陵园旅游剪刀峰旅游玉女溪国家森林公园旅游虎头要塞旅游内蒙古赛马场旅游北郊公园旅游西泰山旅游午门旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘