delphi 7 的socket有关问题请问
delphi 7 的socket问题请教
客户端通过socket发送一个图片给服务器端,服务器端判断是否接收完毕时,判断如果接收完毕后,就调用另一个函数处理图片,请问在判断图片接收完毕这里,怎么写调用另一个函数呢,我现在在socketread 里面,在判断接收完毕语句后面加上处理图片的函数,出现二种情况,一种同一张图片接收,由于需要多次接收才接收完毕,从而调用多次图片处理函数,另一种情况就是接收不正常,
请问该怎么写才对呢,我只需要调用一次处理函数,调用多次就会出错。
------解决方案--------------------
那你应该先说明你用的什么控件,然后贴出部分关键代码,才能知道你的代码错误在哪……
------解决方案--------------------
你的问题是判断接收是否完成不正确,可以根据文件大小判断
发送数据前先发送文件大小给对方,然后再分包发送数据(比如每次1k),接收方每接收到一个包就判断一下
------解决方案--------------------
这样不就行吗
ok:=TMemoryStream.Create;
self.img1.Picture.Graphic.SaveToStream(ok);
取的话,要判断图的类型
如果是jpg的图,img2.picture.graphic:=tjpegimage.create;
如果是BMP的图,img2.picture.graphic:=tbitmap.create;
ok.position:=0;
然后img2.Picture.Graphic.LoadFromStream(ok);
------解决方案--------------------
这个通讯协议就有一定的问题,发了一个起始标识,也有一个结束标识,但是这个结束标识很有可能在图片数据当中出现,因为在接收端不能通过'E'#0来判断是否结束,要么在前面增加一个总长度标识,如果确定是BMP也可以通过先接收BMP头,然后通过BMP头里面的图片大小来判断。
------解决方案--------------------
建议将图片转成字符格式数据上传,或通过XML格式上传。
客户端通过socket发送一个图片给服务器端,服务器端判断是否接收完毕时,判断如果接收完毕后,就调用另一个函数处理图片,请问在判断图片接收完毕这里,怎么写调用另一个函数呢,我现在在socketread 里面,在判断接收完毕语句后面加上处理图片的函数,出现二种情况,一种同一张图片接收,由于需要多次接收才接收完毕,从而调用多次图片处理函数,另一种情况就是接收不正常,
请问该怎么写才对呢,我只需要调用一次处理函数,调用多次就会出错。
------解决方案--------------------
那你应该先说明你用的什么控件,然后贴出部分关键代码,才能知道你的代码错误在哪……
------解决方案--------------------
你的问题是判断接收是否完成不正确,可以根据文件大小判断
发送数据前先发送文件大小给对方,然后再分包发送数据(比如每次1k),接收方每接收到一个包就判断一下
------解决方案--------------------
这样不就行吗
ok:=TMemoryStream.Create;
self.img1.Picture.Graphic.SaveToStream(ok);
取的话,要判断图的类型
如果是jpg的图,img2.picture.graphic:=tjpegimage.create;
如果是BMP的图,img2.picture.graphic:=tbitmap.create;
ok.position:=0;
然后img2.Picture.Graphic.LoadFromStream(ok);
------解决方案--------------------
这个通讯协议就有一定的问题,发了一个起始标识,也有一个结束标识,但是这个结束标识很有可能在图片数据当中出现,因为在接收端不能通过'E'#0来判断是否结束,要么在前面增加一个总长度标识,如果确定是BMP也可以通过先接收BMP头,然后通过BMP头里面的图片大小来判断。
------解决方案--------------------
建议将图片转成字符格式数据上传,或通过XML格式上传。