为了处理程序方便,你需要填加二个变量
dim g_bHasData  As Boolean     '是否有数据
Dim g_bError    As Boolean     '是否有错误发生然后在DataArrival中把g_bHasData设置为true,在Error中把g_bError 设置为true
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
g_bHasData = true
End SubPrivate Sub csoket_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
'根据错误条件把g_bError甚至为true
g_bError = true
End Sub然后在你的程序中
csoket.SendData b的后面填加do until g_bHasData        '如果没有数据一直等待
    if g_bError then
        msgbox "数据发送错误"
        exit sub
    end if
    DoEvents
loopcsoket.GetData b           '获取数据
------------------------------------------
在数据发送之前,把g_bError设置为false,把g_bHasData设置为false
这样处理的好处,可以交互式的处理数据。使得结构非常清楚。
至于你发送了数据,而没有接收到数据,可能的原因有好多,
1。是否网络已经连接上
2。发送数据的时候,是否有错误发生
3。服务程序有没有给你传送数据过来
你可以使用网络监视器来监视数据,看一下问题出在什么地方。这种程序只能
靠调试来解决问题的。

解决方案 »

  1.   

    要先看一下是否连接上了。你在连接上是加个debug.pring "ok".
    要先保证连接,在保证准确传输,多调试.多检测.
      

  2.   

    For k = 1 To n
    msgstr = Mid(Trim(RichTextBox1.text), k, 1)
    b(24 + k) = Asc(msgstr)  '传递短信内容相应ASCII码的值
    Next
    -------------------
    这些代码有问题
    正确的方法,应该是
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal length As Long)
    Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Longdim strMsg as string 
    strMsg = RichTextBox1.text
    CopyMemory b(25), strMsg, lstrlen(strMsg)
      

  3.   

    上面的CopyMemory b(25), strMsg, lstrlen(strMsg)有误
    先修改为:CopyMemory b(25),byval strMsg, lstrlen(strMsg)