1.请教一个简单问题,我现在用Serversocket和clientsocket做通讯,在Serversocket的ClientRead事件中用SendText(str)或者SendBuf发送数据,但是当字符串比较大的时候,超过了41k,在客户端无法收到完整的数据,没有结尾。在clientsocket的ClientSocketRead事件中用Socket.ReceiveText或者用Socket.ReceiveBuf都试过,都是无法收到完整的数据,如果不换控件,应该怎么处理呢?
解决方案 »
- QuickReport使用普通打印机没问题,使用专用打票打印机出错,程序都运行不起来,请问怎么解决~
- 300分,请教关于控制EXCEL中CHART的问题?
- 如何修改硬盘的SN
- 两个问题:DLL和焦点
- 以Delphi的名义,请帮忙
- 初学者问题
- 各位大虾: 启动服务失败的问题
- win2000Server的注册表怎样解锁?一访问就显示"被管理员禁止",怎样解禁呢?我就是管理员呀
- 被同公司的女孩爱上了,干不了工作了,怎么办 ????
- MapObjects的问题,高手请入
- 关于通过http显示图片问题,具体问题请查看内容,提供思路有分,提供具体方法者另开贴谢分,问题不难
- 高手请进,有关ReportMachine3制作报表问题
var
SS: TStringStream;
S: string;
begin
SS := TStringStream.Create(S);
ClientSocket1.Socket.SendStream(SS);
end;
-----------------------
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
g_SS: TFileStream;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
g_SS := TFileStream.Create('C:\dest.bin', fmCreate);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
g_SS.Free;
end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Buf: array [0..4095] of Byte;
iRead: Integer;
begin
iRead := Socket.ReceiveBuf(Buf, SizeOf(Buf));
g_SS.Position := g_SS.Size;
g_SS.WriteBuffer(Buf, iRead);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket1.Open;
end;end.
begin
iLength := fsSend.Size - 1 - fsSend.Position;
if iLength > iBYTEPERSEND then //将数据分段发送
iLength := iBYTEPERSEND;
GetMem(bufSend, iLength + 1);
try
fsSend.Read(bufSend^, iLength); //读取文件流数据
Socket.SendBuf(bufSend^, iLength); //发送长度为iLength的数据
finally
FreeMem(bufSend, iLength + 1); //释放内存
end;
type
custompack=record
size:int64;
content:string[255];
end;
PSMGP_HEAD = ^TSMGP_HEAD;
TSMGP_HEAD = PACKED RECORD
total_length : longword; //消息总长度(含消息头和消息体)
command_id : longword; //命令标识
sequence_id : longword ; //消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
END;
TSMGP_SPTOSMG_LOGIN = PACKED RECORD
Head : TSMGP_HEAD;
Body : TSMGP_LOGIN;
END;