delphi 关于socket.ReceiveBuf接收超过一定长度就出错的问题,请达人们指点!!!

andrewleeyou 2008-11-21 02:25:51
Clientsocket发送的源代码
procedure TForm1.Button1Click(Sender: TObject);
var
strData: string;
mysend: array[0..65535] of Char;
begin
strData := Edit2.Text;
StrPCopy(mysend,strData);
ClientSocket1.Socket.SendBuf(mysend, SizeOf(strData)+1024);
end;


Serversocket接收的源代码
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;Socket: TCustomWinSocket);
var
strData: Pchar;
buf: Pchar;
len: integer;
begin
len := Socket.ReceiveLength+1024;
buf :=allocmem(len);
Socket.ReceiveBuf(buf^,len);
StrCopy(strData,buf);
Edit3.Text:=strData;
end;

有几个问题:
问题1:当接收的长度超过44之后就出错..
例如:
Edit2.Text:=Edit222222222222222222222222222222222222222 就接收正常.
Edit2.Text:=Edit2222222222222222222222222222222222222222 .就出错,服务器端提示为:asynchronous socket error 10053.

问题2:Serversocket接收之后,我如何把接收到的buf 存到数据库的一个image的字段中去.

问题3:我这代码写得有什么不合理之处吗?
...全文
562 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
andrewleeyou 2008-11-21
  • 打赏
  • 举报
回复
谢谢,谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢!!!问题解决....结贴!!!!!!!!!!!!!
gzmhero 2008-11-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 andrewleeyou 的回复:]
接收的地方:

strData没申请空间,直接拷贝 StrCopy(strData,buf); 会有地址错误。

=====
用setlength()吗?好像不行喔....
[/Quote]

pChar类型,怎么能setlength.....

GetMem
andrewleeyou 2008-11-21
  • 打赏
  • 举报
回复
接收的地方:

strData没申请空间,直接拷贝 StrCopy(strData,buf); 会有地址错误。

=====
用setlength()吗?好像不行喔....
gzmhero 2008-11-21
  • 打赏
  • 举报
回复
3、

接收的地方长度干啥要加个1024?
gzmhero 2008-11-21
  • 打赏
  • 举报
回复
2、
var
Stream:TMemoryStream;

Stream:=TMemoryStream.Create;
Stream.Write(buf,len);
Stream.Position:=0;
TBlobField(qr.FieldByName('img')).LoadFromStream(Stream);
Stream.Free;
gzmhero 2008-11-21
  • 打赏
  • 举报
回复
接收的地方:

strData没申请空间,直接拷贝 StrCopy(strData,buf); 会有地址错误。

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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