vb用winsock通讯问题
blire 2008-10-20 04:28:59 我需要和一个文件服务器进行通讯,来获取服务器上的某个文件。
接口如下:
一. 报文格式
报文组成为:报文头+报文体。
报文头,共4个字节,用以存放报文体的长度,不包括报文头4个字节。“0100”表示报文体长度为100个字节;
报文体,存放报文具体的内容。
二. 客户端使用接口
int TranFile (
char *pszHostName , /*主机名称, 在/etc/hosts中定义*/
int iPortNo , /*port number*/
char *pszCmd, /*PUT:表示上传文件,GET表示接收文件/
char *pszFileName /*文件名称,相对文件路径*/
)
三.客户接收文件的处理流程
1.根据主机名称和端口号,和主机建立联机;
2.发送接收文件请求报文,报文格式如下:
报文长度(4)+FILETRANHEADER;
3.接收回应,回应报文格式如下:
报文长度(4)+FILETRANHEADER;
4.根据报文中的处理结果,如果为’0’,表示成功,否则出错;
5.如果成功,接收后续报文。后续报文格式如下:
报文长度(4)+报文序号(8)+结束标志(1)+文件内容
6.接收报文体的回应格式
报文长度(4)+报文序号(8)
现在我遇到的问题是在收到第5步后续报文后,无法向服务器发送第6步的回应报文。
程序log如下:
[
发送:00762fil/FILE02200001000039 0
文件长度为3551
收到:00762fil/FILE02200001000039 00003551 0
收到:0521000000010{
title=内部帐科目分户余额查询
trancode=
fld=brc~机构码~0~9~2~NULL
fld=acctno~帐号~0~32~2~NULL
fld=accname~户名~0~70~2~NULL
fld=ccy~币种号~0~3~2~NULL
fld=subctrlcode~科目控制字~0~10~2~NULL
fld=balctrldir~余额方向~0~1~2~<D>借/收 <C>贷/付 <B>双向
fld=lastbal~上日余额~4~18~2~NULL
fld=currbal~当前余额~4~18~2~NULL
fld=seqno~顺序号~1~6~2~NULL
fld=status~帐户状态~0~1~2~<0>正常 <1>销户
fld=lastdate~上一交易日~0~10~2~NULL
fld=termtype~期限类型~0~1~2~<D>天 <M>月 <Y>年
fld=term~期限~1~6~2~NULL
fld=en
]
收数据程序如下
Private Sub tcpClient_DataArrival _
(ByVal bytesTotal As Long)
Dim strData As String
Dim filesize As Long
Open "c:\aaa.txt" For Append As #1
tcpClient.GetData strData
If Len(strData) = 0 Then
MsgBox "receve error"
Exit Sub
End If
txtOutput.Text = strData
If Mid(strData, 1, 4) = "0076" Then
If Mid(strData, 79, 1) = "0" Then
filesize = Mid(strData, 70, 8)
Print #1, "文件长度为" & CStr(filesize)
Else
MsgBox "请确认文件名是否正确"
End If
End If
If Mid(strData, 1, 4) = "0521" Then
tcpClient.SendData "0009" & Mid(strData, 5, 8) & Chr(0)
End If
Print #1, strData
Close #1
End Sub
程序能够运行到 tcpClient.SendData "0009" & Mid(strData, 5, 8) & Chr(0)
但是运行完就结束了,不会再次进入到tcpClient_DataArrival里面来,请教各位高手这种情况该如何处理。
blire@sina.com