T
tihu1111
Unregistered / Unconfirmed
GUEST, unregistred user!
我现在是用HTTPServer 来做一个下载服务器来供一个单片机来下载文件,
下面是对客户端发来请求的响应过程;
procedure TFrmMain.IdHTTPSCommandGet(AThread: TIdPeerThread;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
LocalDoc:string;
ByteSent: Cardinal;
dirstr:string;
begin
dirstr:=trim(G_httpDir);
LocalDoc:=ExpandFileName(dirstr+ARequestInfo.Document); //返回包含绝对路径
if not FileExists(LocalDoc)then
begin
ShowdataInfo(' HTTP |'+ARequestInfo.Command+' | '+ARequestInfo.RemoteIP+' | '+ARequestInfo.Document
+' 文件不存在');
exit;
end;
// uppercase(ARequestInfo.Command)='HEAD'
if AnsiSameText(ARequestInfo.Command, 'HEAD') then
begin
AResponseInfo.ContentLength := FileSizeByName(LocalDoc);
AResponseInfo.ContentText:=idhttps.MIMETable.GetFileMIMEType(LocalDoc);
ShowdataInfo(' HTTP |'+ARequestInfo.Command+'|'+ARequestInfo.RemoteIP+' | '+ARequestInfo.Document);
end
// uppercase(ARequestInfo.Command)='GET'
Else
begin
try
ByteSent:=IdHttpS.ServeFile(AThread,AResponseInfo,LocalDoc);
ShowdataInfo(' HTTP |'+ARequestInfo.Command+'|'+ARequestInfo.RemoteIP+' |'+ARequestInfo.Document); //显示
except
On E:Exception do
begin
ShowdataInfo(' HTTP |'+ARequestInfo.Command+'|'+ARequestInfo.RemoteIP+' |'+ARequestInfo.Document+' '+E.Message);
end;
end;
end
end;
问题:Socket Error # 0
我用Idhttp 做客户端下载,是不会出现问题的。
但是用 单片机来下载,有时就会报错 执行这个函数是 IdHttpS.ServeFile(AThread,AResponseInfo,LocalDoc);就是报错 Socket Error # 0;
报错时,IdHttpS.ServeFile(AThread,AResponseInfo,LocalDoc);函数,好久没有返回 另注:如果用在网上下载的一个http服务器 来做服务器,供单片机下载,却不会出现 这样的问题。
请问:是不是我还有一些地方该设置的没有设置阿
第一个用这个控件,也是第一个接触Http 请那位高手指教下!
不胜感谢!
下面是对客户端发来请求的响应过程;
procedure TFrmMain.IdHTTPSCommandGet(AThread: TIdPeerThread;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
LocalDoc:string;
ByteSent: Cardinal;
dirstr:string;
begin
dirstr:=trim(G_httpDir);
LocalDoc:=ExpandFileName(dirstr+ARequestInfo.Document); //返回包含绝对路径
if not FileExists(LocalDoc)then
begin
ShowdataInfo(' HTTP |'+ARequestInfo.Command+' | '+ARequestInfo.RemoteIP+' | '+ARequestInfo.Document
+' 文件不存在');
exit;
end;
// uppercase(ARequestInfo.Command)='HEAD'
if AnsiSameText(ARequestInfo.Command, 'HEAD') then
begin
AResponseInfo.ContentLength := FileSizeByName(LocalDoc);
AResponseInfo.ContentText:=idhttps.MIMETable.GetFileMIMEType(LocalDoc);
ShowdataInfo(' HTTP |'+ARequestInfo.Command+'|'+ARequestInfo.RemoteIP+' | '+ARequestInfo.Document);
end
// uppercase(ARequestInfo.Command)='GET'
Else
begin
try
ByteSent:=IdHttpS.ServeFile(AThread,AResponseInfo,LocalDoc);
ShowdataInfo(' HTTP |'+ARequestInfo.Command+'|'+ARequestInfo.RemoteIP+' |'+ARequestInfo.Document); //显示
except
On E:Exception do
begin
ShowdataInfo(' HTTP |'+ARequestInfo.Command+'|'+ARequestInfo.RemoteIP+' |'+ARequestInfo.Document+' '+E.Message);
end;
end;
end
end;
问题:Socket Error # 0
我用Idhttp 做客户端下载,是不会出现问题的。
但是用 单片机来下载,有时就会报错 执行这个函数是 IdHttpS.ServeFile(AThread,AResponseInfo,LocalDoc);就是报错 Socket Error # 0;
报错时,IdHttpS.ServeFile(AThread,AResponseInfo,LocalDoc);函数,好久没有返回 另注:如果用在网上下载的一个http服务器 来做服务器,供单片机下载,却不会出现 这样的问题。
请问:是不是我还有一些地方该设置的没有设置阿
第一个用这个控件,也是第一个接触Http 请那位高手指教下!
不胜感谢!