有一java程序为通讯服务端,这个程序有一个口令验证的过程,connect没问题,登陆也没问题,但是登陆后发包,服务器显示收到的就不对了;直接connect后发包,服务器能收到,当然了,因为没有登陆,所以处理结果不对。
初始化:
If Winsock1.State <> 0 Then
Winsock1.Close
End If
Winsock1.protocol = sckTCPProtocol
Winsock1.RemoteHost = Txt_ip.Text
Winsock1.RemotePort = Txt_port.Text
Winsock1.connect
登陆:
ReDim loginBuffer(Len(sdata) / 2)
For iLoop = 1 To Len(sdata) / 2
loginBuffer(iLoop - 1) = Val("&H" & Mid(sdata, iLoop * 2 - 1, 2))
Next iLoopDo While Winsock1.State <> sckConnected
DoEvents
Loop
Winsock1.SendData loginBuffer
DoEvents发送的测试包:
Dim activeBuffer() As Byte
Dim iLoop As Integer
Dim sdata1 As String
Dim msg_head As cmpp_head
msg_head.Total_Length = Len(msg_head)
msg_head.Total_Length = Hex(msg_head.Total_Length)
For n = 1 To 8 - Len(msg_head.Total_Length)
msg_head.Total_Length = "0" & msg_head.Total_Length
Next
msg_head.Command_Id = nCMPP_ACTIVE_TEST
msg_head.Sequence_Id = getSeq_Id(Sequence_Id)
sdata1 = ""
sdata1 = msg_head.Total_Length
sdata1 = sdata1 & msg_head.Command_Id
sdata1 = sdata1 & msg_head.Sequence_Id
sdata1 = sdata1 & vbCrLfReDim activeBuffer(Len(sdata1) / 2)
For iLoop = 1 To Len(sdata1) / 2
activeBuffer(iLoop - 1) = Val("&H" & Mid(sdata1, iLoop * 2 - 1, 2))
Next iLoopDo While Winsock1.State <> sckConnected
DoEvents
Loop
Winsock1.SendData activeBuffer
DoEvents不知道是怎么回事?查了好久,没找到问题所在。请高手解答。
初始化:
If Winsock1.State <> 0 Then
Winsock1.Close
End If
Winsock1.protocol = sckTCPProtocol
Winsock1.RemoteHost = Txt_ip.Text
Winsock1.RemotePort = Txt_port.Text
Winsock1.connect
登陆:
ReDim loginBuffer(Len(sdata) / 2)
For iLoop = 1 To Len(sdata) / 2
loginBuffer(iLoop - 1) = Val("&H" & Mid(sdata, iLoop * 2 - 1, 2))
Next iLoopDo While Winsock1.State <> sckConnected
DoEvents
Loop
Winsock1.SendData loginBuffer
DoEvents发送的测试包:
Dim activeBuffer() As Byte
Dim iLoop As Integer
Dim sdata1 As String
Dim msg_head As cmpp_head
msg_head.Total_Length = Len(msg_head)
msg_head.Total_Length = Hex(msg_head.Total_Length)
For n = 1 To 8 - Len(msg_head.Total_Length)
msg_head.Total_Length = "0" & msg_head.Total_Length
Next
msg_head.Command_Id = nCMPP_ACTIVE_TEST
msg_head.Sequence_Id = getSeq_Id(Sequence_Id)
sdata1 = ""
sdata1 = msg_head.Total_Length
sdata1 = sdata1 & msg_head.Command_Id
sdata1 = sdata1 & msg_head.Sequence_Id
sdata1 = sdata1 & vbCrLfReDim activeBuffer(Len(sdata1) / 2)
For iLoop = 1 To Len(sdata1) / 2
activeBuffer(iLoop - 1) = Val("&H" & Mid(sdata1, iLoop * 2 - 1, 2))
Next iLoopDo While Winsock1.State <> sckConnected
DoEvents
Loop
Winsock1.SendData activeBuffer
DoEvents不知道是怎么回事?查了好久,没找到问题所在。请高手解答。
解决方案 »
- 朋友们帮下忙,如何写入文本多行数据?
- 我机器上能运行的程序,在别人机器上提示缺少某个控件!是否还需要配置环境?
- 使用DATAGRID时如何不固定datasource.
- 图片的水平翻转,和网页制作中的flipH功能一样的。
- 过时的RDO技术问题!
- OpenProcess取不到 魔兽争霸的 进程句柄 怎么办?还有什么取 进程句柄的方法?? 代码没问题 取别的正常。
- 关于data控件的问题
- 我用GetTempPath和GetTempFileName获得一个系统目录下的临时文件,但在Win2k下就不行了,难道不同了吗?我该怎么做呢?
- 请问用什么命令或工具能生成.cab文件
- 谁能写一个自动将1000多个html文件按一定顺序读入word,转化成word文件的程序
- 请问VB.NET里的这句话在VB6里怎么实现?
- vb中的控件不能使用
1.在SENDDATA前,将发送的BYTE包,保存到本地,可以写入二进制,每次都这么做。
2.检查是否每次的REMOTEIP和REMOTEPORT的值都相同。。
3.如果测试完毕之后检查4包数据之间的差异。
4.如果发送数据没有问题的话,可能多半是协议的问题
5.将数据给JAVA组的同事,看格式是否能正确被SERVER端处理。。呵呵如果是第三方公司,则跟他们的工程师联系,得到正确的数据发送协议
通过调试,从发送的数据包来看,两次发送格式的没有差异。
只连接了一个远端,所以REMOTEIP和REMOTEPORT是一样的。
协议就是使用的CMPP3.0。
我这边做的是一个测试程序,便于测试java组同事做的系统的正确性。我用该测试程序往我写的一个vb的服务端发送数据是没有问题的,从这个角度看,测试测试没有问题;但是我用我写的一个vc的测试程序往java服务端发包,结果是正确的;所以问题还是出在vb测试程序上,我在根据你们的思路找找原因看看,多谢大家。
推荐是用IRIS 4.07.1可以查看正确的发往远程的数据包内容
你检查VC发送的原始数据包与VB的差别哈哈直接就可以对比了
感谢各位,尤其是acmilan1984。