vb Winsock控件 接受byte数组

眯眯豆儿 2011-01-09 04:30:28
用winsock1 发送数据,发送的是byte数组,接受的时候用byte数组来接收。出现的问题,成功将数据发送的出去,可是接受的时候却接收不到,错误提示 “连接由远程端重新设置”“由于超市或其他失败连接终止”

请教各位前辈。代码如下:

发送数据:
Private Sub BWZZ()
Winsock1.Connect
Timer2.Interval = 500
Timer2.Enabled = True
End sub

Private Sub Timer2_Timer()

If Winsock1.State = 7 Then
Winsock1.senddata a ' dim a(100) as byte
End If
If Winsock1.State = 9 Then
Timer1.Interval = 0
Timer1.Enabled = False
End If

End Sub

接受数据:

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim b() As Byte
ReDim b(bytesTotal - 1) As Byte
Winsock1.GetData b, vbByte, bytesTotal

End Sub
...全文
370 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
眯眯豆儿 2011-01-11
  • 打赏
  • 举报
回复
谢谢大家帮忙,问题解决了。是这样的,只要服务器方,下发完数据,在延迟5秒钟,然后在关闭连接,我就可以收到了。

同样的情况,如果服务器下发的string 不是ascii 码的话,不需要延迟我就可以用string收到。这是怎么回事呢?

king06 2011-01-10
  • 打赏
  • 举报
回复
接收端都没侦听?
眯眯豆儿 2011-01-10
  • 打赏
  • 举报
回复
我的代码:谢谢各位

Private Sub Form_Load()
DoEvents
Me.Move 0, 0, Screen.Width, Screen.Height
Command1.Enabled = False
Command1.Visible = False
chay = ""

Timer1.Enabled = True
Timer1.Interval = 36900
Call BWZZ
End Sub

Private Sub BWZZ()
Dim wyb As String
Dim u As Long
Dim u1 As Long
Dim u2 As Long
wyb = ""
Select Case Left(zhang, 4)
Case "缴费" '组织报文 然后赋值给byte 数组
chay = "004060" & "0000000000"
Debug.Print chay
ReDim a(7) As Byte


u2 = 1
For u1 = 0 To 7
a(u1) = "&H" & Mid(chay, u2, 2)
u2 = u2 + 2
Next u1

Case Else

cs.Label2.Caption = "终端识别账户错误 交易失败"
cs.Show
Timer1.Enabled = False
Timer2.Enabled = False
Me.Hide


End Select

Winsock1.Close

Winsock1.Protocol = sckTCPProtocol

Winsock1.RemoteHost = ip2
Winsock1.LocalPort = 0
Winsock1.RemotePort = dk2

Winsock1.Connect

Timer2.Interval = 500
Timer2.Enabled = True

End Sub

Private Sub timer1_Timer()
cs.Label2.Caption = "操作超时 系统将返回主机界面"
cs.Show
Timer1.Enabled = False
Timer2.Enabled = False
Me.Hide
End Sub

Private Sub Timer2_Timer()
If Winsock1.State = 7 Then
'Winsock1.senddata chay
Winsock1.senddata a
End If
If Winsock1.State = 9 Then
Timer1.Interval = 0
Timer1.Enabled = False
End If

End Sub



Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim b() As Byte
ReDim b(bytesTotal - 1) As Byte
Winsock1.GetData b, vbByte, bytesTotal


End Sub



Private Sub Winsock1_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)
MsgBox Description
End Sub
孤独剑_LPZ 2011-01-10
  • 打赏
  • 举报
回复
代码不全,参考示例吧
chinaboyzyq 2011-01-10
  • 打赏
  • 举报
回复
连接由远程端重新设置

多是由于UDP协议、使用同一IP且服务器端软件与客户端软件在同一机子上测试造成的,
分在不同的机子上测试可避免此类错误。

另外:非要在同一台机子上测试的话,可以在本地连接的tcp/ip协议的高级选项里再添加一个IP,
用不同的IP测试即可。
homezj 2011-01-09
  • 打赏
  • 举报
回复
连接部分代码没贴出来?
什么也没收到,你又是怎么知道发出去了呢?

代码很独道,不敢说不对,但至少说是非常规。建议你看看MSDN中的相关示例。

另外,请使用常量名,没几个人能天天记得7与9代表什么,没可读性,自然没人愿意看。
dbcontrols 2011-01-09
  • 打赏
  • 举报
回复
也许未必是你的错,是不是对方终止发送或防火墙问题

1,453

社区成员

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

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