我有一个银行代理收费的接口问题,是用delphi的ServerSocket,采用多线程来做的,是阻塞模式。在银行已经进行了近一个月的测试没有发生问题,可是是现在正常使用后,发现银行的流量超过3K的时候,就会出错,连接停止!
解决方案 »
- 碰到奇怪的图片地址,下载始终不完整
- 错误提示:“当前提供程序不支持从单一执行返回多个记录”。请高手指点!谢谢:)
- 为什么我的子窗体显示的时候总是靠在父窗体的左上角? 如何指定子窗体显示的位置?
- ~~~求助~~~~~关于TDataSet和DataSet的关系,详情请进!
- 如何向word模板里指定位置写入文字或者画图形
- 看看什么地方错了,小弟初学
- 急:怎么检测本机和另一台电脑网络连接正常,某端口连接正常?
- dbgrid的问题,谢谢
- 怎样控制键盘输入
- 当按任意键时退出循环。
- 放分为明天考试的DDMM祝福!
- 如何捕获 (声明) DataSource.DataSet 中的 BeforePost 等事件?(特急)
例如:
1、假设B公司连续发送该信息:200001000000111234567891
信息长度不固定。
2、A公司的接口程每次从缓冲区读出的正常信息:
’2’,’0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’,’1’,’1’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’1’,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0
以上是一个查询信息,A公司处理完本次查询后,再去读缓冲区。但在B公司发送信息的条数为123条的时候,发现A公司的接口程序读出的信息为:
’2’,’0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’,’1’,’1’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’1’, ’2’,’0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’,’1’,’1’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’1’, ’2’,’0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’,’1’,’1’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’1’, ’2’,’0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’,’1’,’1’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’1’, ’2’,’0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’,’1’,’1’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’1’, ’2’,’0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’,’1’,’1’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’1’, ’2’,’0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’,’1’,’1’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’1’, ’2’,’0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’,’1’,’1’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’1’, ’2’,’0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’,’1’,’1’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’1’, ’2’,’0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’,’1’,’1’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’1’, ’2’,’0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’,’1’,’1’,’1’
读取下次的信息是从劫断的信息的后半部分开始的,信息内容基本同上。
A公司的接口程序的读取部分的代码如下:
var
ReceiveStream, RequestStream,RequestStream1: TWinSocketStream;
Rec_Bytes, I: Integer;
OperationCode, ResultStr: string;
begin
while (not Terminated) and (ClientSocket.Connected) do
begin
try
RequestStream := TWinSocketStream.Create(ClientSocket, 60000);
try
FillChar(Request_buf, SizeOf(Request_buf), 0);
//Request_Buf_Bytes:=RequestStream.CopyFrom(RequestStream,MAXLENGTH);
Request_buf_bytes := RequestStream.Read(Request_buf,MAXLENGTH);
if Request_buf_bytes = 0 then
begin
Sleep(1);
ClientSocket.Close;
Terminate;
end
else
begin
try
RecieveStr := Trim(Request_buf);
//RecieveStr := Trim(RecieveStr);
PostMessage(frmMain.Handle, CM_ADDSTRING, 0,
Integer(PChar('From '+ClientSocket.RemoteAddress+'('+FormatDateTime('yyyy-mm-dd hh:nn:ss',Now)+')'+':'+#13+#10+RecieveStr)));
if Length(RecieveStr) > 20 then
ManageBankData(RecieveStr, ClientSocket);
except
end;
end;
finally
RequestStream.Free;
end;
except
HandleException;
end;
end;
end;
其中ClientSocket为TserverSocket类型,并且设置为阻塞模式,上面代码通过循环反复读取缓冲区的信息。采用了Socket流读取的方式进行操作的。A公司采用Windows2000 Server系统,B公司采用UNIX系统。