我用clientsocket来接收数据,用serversocket来定时发送数据。双方用TWinsocketStream的read和write来读和写的,结果是读到的数据和写的数据不一样阿。而且,在server端还没有写数据的时候,client端的waitfordata(6000)就已经检测到数据,并且读出来的数据不正确。
请问这到底是什么原因造成的?是不是在哪个地方设置什么属性阿?
请问这到底是什么原因造成的?是不是在哪个地方设置什么属性阿?
解决方案 »
- adoquery调用存储过程
- 请教一下dbgrideh控件的刷新显示数据的问题
- 关于 ‘表单+通配符’的格式?
- 高分求助!如何在调用的execel上画线呀(画园)!
- 该怎么学NET
- 菜鸟问题!关于窗体
- 如何讓ShellExecute(0, 'open', 'http://www.csdn.net', nil, nil, SW_NORMAL);每次都在新window中開啟
- 如何实现重新登陆的功能呢?
- 怎么把BDE打包到安装程序中去呢?DELPHI自带的INSTALLSHIELD在哪里啊。。我怎么找不到这个东西啊。大家说详细一些好吗?
- Dll 如何处理请各位打下赐教
- 问一个问题!!!很急!!一解决马上给分!!!
- sql server数据库存取效率问题
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ScktComp;type
TCon = record
FileName : String;
TotalSize : Integer;
Status : Integer;
end; PCON = ^TCON; TForm1 = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
ClientSocket: TClientSocket;
ServerSocket: TServerSocket;
btnServerActive: TButton;
btnClientCon: TButton;
btnClientDisConn: TButton;
BtnClientSendF: TButton;
Memo1: TMemo;
OpenDialog: TOpenDialog;
Edit1: TEdit;
Label1: TLabel;
procedure btnClientConClick(Sender: TObject);
procedure btnClientDisConnClick(Sender: TObject);
procedure BtnClientSendFClick(Sender: TObject);
procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure btnServerActiveClick(Sender: TObject);
procedure ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocketClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}var Count : Integer;function GetFileSize(const FileName: string):integer;
var f : TFileStream;
begin
f := TFileStream.Create(FileName,fmOpenRead or fmShareDenyNone);
Result :=f.Size;
F.Free;
end;procedure TForm1.btnClientConClick(Sender: TObject);
begin
ClientSocket.Active := True;
with OpenDialog do
begin
Execute;
if FileName <> '' then
begin
Edit1.Text := 'UPLOAD '+ ExtractFileName(FileName) +' '+Inttostr(GetFileSize(FileName));
Label1.Caption := FileName;
ClientSocket.Socket.SendText(edit1.Text);
end;
end;
end;procedure TForm1.btnClientDisConnClick(Sender: TObject);
begin
ClientSocket.Active := False;
end;procedure TForm1.BtnClientSendFClick(Sender: TObject);
var fs : TFileStream;
Buf : pointer;
begin
fs := TFileStream.Create(Label1.Caption ,fmOpenRead or fmShareDenyNone);
GetMem(Buf,fs.Size);
fs.Seek(0,soFromBeginning);
fs.ReadBuffer(Buf^,fs.Size);
memo1.Lines.Add('has send : '+inttostr(ClientSocket.Socket.SendBuf(Buf^,fs.Size)));
end;procedure TForm1.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.add(socket.ReceiveText);
end;procedure TForm1.ClientSocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode := 0;
end;procedure TForm1.btnServerActiveClick(Sender: TObject);
begin
ServerSocket.Active := True;
end;procedure TForm1.ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
var c : pcon;
begin
c :=new(pcon);
c.FileName := '';
c.TotalSize := 0 ;
c.Status := 0;
Socket.Data := c;
Socket.SendText('已经连接,请输入UPLOAD FILENAME SIZE'#13#10);
end;procedure TForm1.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var C : PCON;
cmd:String;
Buffer : pointer;
nRetr : integer;
fs : TFileStream;
const bufferSize = 1024 ;begin
C:= Socket.Data ;
case c.Status of
0 :
begin
cmd := trim(Socket.ReceiveText) ;
if Pos('UPLOAD ',uppercase(cmd)) > 0 then
begin
c.FileName := trim(Copy(cmd,Pos(' ',cmd)+1,Length(cmd)));
c.TotalSize := StrToInt(Copy(c.FileName,Pos(' ',c.FileName)+1,Length(c.FileName)));
c.FileName := trim(Copy(c.FileName,1,Pos(' ',c.FileName)));
c.Status := 1;
Socket.Data := C;
Socket.SendText('you can send File !'#13#10);
end;
end;
1 :
begin
Count := count + 1;
GetMem(Buffer,BufferSize);
nRetr := Socket.ReceiveBuf(Buffer^,BufferSize);
Memo1.Lines.Add(IntToStr(Count) + ' ' + IntToStr(nRetr));
if not FIleExists('c:\'+c.FileName) then
begin
fs :=TFileStream.Create('c:\'+c.FileName,fmCreate or fmShareDenyNone);
fs.Seek(0,soFromBeginning);
end
else
begin
fs :=TFileStream.Create('c:\'+c.FileName,fmOpenWrite or fmShareDenyNone);
fs.Seek(0,soFromEnd);
end;
fs.WriteBuffer(Buffer^,nRetr);
fs.Destroy;
FreeMem(Buffer);
end;
end;
end;procedure TForm1.ServerSocketClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode := 0;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Count := 0;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ClientSocket.Active := False;
ServerSocket.Active := False;
end;end.
现在我用的是Twinsocketstream的read,write来读写的。就出现了上述问题,谁能给我解释是什么原因吗?
这个问题可以揭贴啦!