var
Form1: TForm1;
bReadText:boolean;
implementation
{$R *.dfm}
procedure TForm1.btnstartServerClick(Sender: TObject);
begin
ss.Port:=2000;
bReadText := true;
Edit1.Text:='Server is listening';
ss.Open;
end;
procedure TForm1.ssClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Edit1.Text:='Server is connected by'+Socket.RemoteAddress;
end;
procedure TForm1.ssClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
sTemp:string;
bufRecv:Pointer;
iNum:integer;
begin
Memo1.Lines.Add('received size :' + intToStr(Socket.ReceiveLength));
if bReadText then
begin
sTemp:=Socket.ReceiveText;
case sTemp[1] of
MP_QUERY:
begin
Memo1.Lines.Add('receive MP_QUERY');
SaveDialog1.FileName:=Copy(sTemp,2,Length(STemp));
if SaveDialog1.Execute then
begin
// ss.Socket.SendText(MP_ACCEPT);
ss.Socket.Connections[0].SendText(MP_ACCEPT);
fsRecv := TMemoryStream.Create;
// fsRecv:=TFileStream.Create(SaveDialog1.FileName,fmCreate);
edit2.Text := SaveDialog1.FileName;
end
else
ss.Socket.Connections[0].SendText(MP_REFUSE+'');
end;
MP_FILEPROPERTY:
begin
Memo1.Lines.Add('receive MP_FILEPROPERTY');
ss.Socket.Connections[0].SendText(MP_NEXTWILLBEDATA);
end;
MP_NEXTWILLBEDATA:
begin
Memo1.Lines.Add('receive MP_NEXTWILLBEDATA');
bReadText:=false;
ss.Socket.Connections[0].SendText(MP_DATA);
end;
MP_END:
begin
Memo1.Lines.Add('receive MP_END');
fsRecv.Free;
bReadText:=true;
end;
MP_ABORT:
begin
Memo1.Lines.Add('receive MP_ABORT');
fsRecv.Free;
bReadText:=true;
end;
MP_CHAT:
begin
Memo1.Lines.Add('receive MP_CHAT');
end;
end;{of case}
end
else
begin
try
if iNum = iBYTEPERSEND THEN
begin
ss.Socket.Connections[0].SendText(MP_NEXTWILLBEDATA);
end
else
begin
fsRecv.SaveToFile(SaveDialog1.FileName);
fsRecv.Free;
ss.Socket.Connections[0].SendText(MP_END);
end;
end;
end;
procedure TForm1.ssClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
Memo1.Lines.Add('ErrorCode :' + IntToStr(ErrorCode));
ErrorCode := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var I, j: integer;
begin
J := ss.Socket.ActiveConnections;
Memo1.Lines.Add('ActiveConnectiong is ' + inttostr(j));
for I:= 0 to j- 1 do
ss.Socket.Connections[i].SendText(edit3.Text)
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ss.Port:=2000;
bReadText := true;
Edit1.Text:='Server is listening';
ss.Open;
end;
end.
----------------------客户端----------------------------
unit clientSocketu;
procedure TForm1.btnConnectClick(Sender: TObject);
begin
cs.Address := edtIPAddress.Text;
cs.Port:=2000;
cs.Open;
end;
procedure TForm1.btnSendFileClick(Sender: TObject);
begin
if OpenDialog1.Execute then
Begin
cs.Socket.SendText(MP_QUERY+OpenDialog1.FileName);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
edit1.Color:=clBlack;
edit1.Font.Color:=clLime;
end;
procedure TForm1.csRead(Sender: TObject; Socket: TCustomWinSocket);
var
sRecv:string;
// sTemp:string;
iNum:integer;
bufSend:pointer;
begin
// GetMem(bufSend,iBytePersend+1);
sRecv:=Socket.ReceiveText;
Memo1.Lines.Add('sRecv = ' + sRecv);
Case sRecv[1] of
MP_REFUSE:ShowMessage('Faint,be refused!');
MP_ACCEPT:begin
Memo1.Lines.Add('MP_ACCEPT');
fsSend:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead);
//iBYTEPERSEND琌熌盽秖–Ω塝癳
edtSize.Text:=IntToStr(fsSend.Size);
edit2.text:='total count:'+IntToStr(Trunc(fsSend.Size/iBYTEPERSEND)+1);