btnStartServer.OnClick(Sender:TObject);
begin
ss.Port:=2000;
ss.Open;
end;
ss.OnClientRead(Sender: TObject;Socket: TCustomWinSocket);
var
sTemp:string;
bufRecv:Pointer;
iRecvLength:integer;
begin
if bReadText then
begin
sTemp:=Socket.ReceiveText;
case sTemp[1] of
MP_QUERY:begin
//在这里拒绝
SaveDialog1.FileName:=Copy(sTemp,2,Length(STemp));
if SaveDialog1.Execute then
begin
Socket.SendText(MP_ACCEPT);
fsRecv:=TFileStream.Create(SaveDialog1.FileName,fmCreate);
end
else Socket.SendText(MP_REFUSE+’去死’);
end;
MP_FILEPROPERTY:begin
//要发送StrToInt(Copy(sTemp,2,Length(sTemp))) 次
//时间进度显示。。。
Socket.SendText(MP_NEXTWILLBEDATA);
end;
MP_NEXTWILLBEDATA:begin
Socket.SendText(MP_DATA);
bReadText:=false;
end;
MP_END:begin
fsRecv.Free
bReadText:=true;
end;
MP_ABORT:begin
fsRecv.Free;
bReadText:=true;
end;
MP_CHAT:begin
//Chat Msg
end;
end;{of case}
end
else begin
try
GetMem(bufRecv,2000);//2000 must >iBYTESEND
Socket.ReceiveBuf(bufRecv^,iRecvLength);
fsRecv.WriteBuffer(bufRecv^,iRecvLength);
finally
FreeMem(bufRecv,2000);
end;{of try}
bReadText:=true;
Socket.SendText(MP_NEXTWILLBEDATA);
end;
end;
procedure TForm1.listen1Click(Sender: TObject);
begin
Listen1.Checked:=not Listen1.Checked;
if Listen1.Checked then
begin
ClientSocket1.Active:=False;
ServerSocket1.Active:=True;
StatusBar1.Panels[0].Text:='Listening...';
end
else
begin
if ServerSocket1.Active then
ServerSocket1.Active:=False;
StatusBar1.Panels[0].Text:='';
end;
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
ClientSocket1.Close;
ServerSocket1.Close;
Close;
end;
procedure TForm1.Connect1Click(Sender: TObject);
begin
if ClientSocket1.Active then ClientSocket1.Active:=False;
if InputQuery('Computer to connect to','Address Name:',Servername) then
//弹出对话框以便让用户输入服务器地址,可以是ip地址也可以是主机名
if Length(Servername)>0 then
with ClientSocket1 do
begin
Host:=Servername;
Active:=True;
Listen1.Checked:=False;//此时本机作为客户机,没有监听功能
end
else
begin
showmessage('请输入连接的主机地址!');
end;
end;
procedure TForm1.Disconnect1Click(Sender: TObject);
begin
ClientSocket1.Active:=False;
ServerSocket1.Active:=True;
//打开服务器套接字,执行监听
Statusbar1.Panels[0].Text:='Listening...';
Statusbar1.Panels[1].Text:='';
end;
procedure TForm1.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
begin
IsServer:=True;
StatusBar1.Panels[0].Text:='Connected to:'+Socket.RemoteAddress;
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.Panels[0].Text:='Listening...';
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.Panels[0].Text:='Connected to:'+Socket.RemoteHost;
//连接成功
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Listen1Click(nil);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Listen1Click(nil);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Ext:string;
begin
Edit1.Text:='';
if OpenDialog1.Execute then
begin
Ext:=ExtractFileExt(OpenDialog1.FileName);
if Ext<>'.txt' then
begin
showmessage('Only Txt File Accepted!');
exit;
end
else
begin
Edit1.Text:=OpenDialog1.FileName;
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Edit1.Text:='';
Edit1.SetFocus;
Memo1.Lines.Clear;
end;
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
showmessage('Error connecting to:'+Servername);
ErrorCode:=0;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
txt:Pchar;
begin
if IsServer then
begin
if Memo1.Text='' then
begin
ShowMessage('Nothing to Send!');
end
else
begin
GetMem(txt,Length(Memo1.Text)+1);
ZeroMemory(txt,Length(Memo1.Text)+1);
txt:=Pchar(Memo1.Text);
ServerSocket1.Socket.Connections[0].SendBuf(txt^,Length(Memo1.Text));
Showmessage('信息发送成功!');
end;
end
else
begin
ClientSocket1.Socket.SendText(Memo1.Text);
end;
end;
procedure TForm1.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ShowMessage('服务器套接字出错!!');
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
if SaveDialog1.Execute then
Memo2.Lines.SaveToFile(SaveDialog1.FileName);
end;
procedure TForm1.Help1Click(Sender: TObject);
begin
showmessage('All right reserve by hanqing studio! E-mail to huanghanqingaaa@163.com')
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
txt:Pchar;
Count,NumberBytes:Integer;
//num:integer;
begin
//num:=Length(ClientSocket1.Socket.ReceiveText);
//num:=ClientSocket1.Socket.ReceiveLength;
StatusBar1.Panels[1].Text:='Receiving data';
GetMem(txt,NumberBytes+1);
ZeroMemory(txt,NumberBytes+1);
ClientSocket1.Socket.ReceiveBuf(txt^,Count);
Memo2.Lines.Add(txt);
FreeMem(txt);
//Memo2.Lines.Add(Socket.ReceiveText);
Showmessage('收到信息!');
StatusBar1.Panels[1].Text:='data received!';
//StatusBar1.Panels[1].Text:='Data Received!The size of the file is '+IntToStr(num)+' bytes!';
end;
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Clear;
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
//var
// num:integer;
begin
//num:=Length(Socket.ReceiveText);
//showmessage('收到客户机发来的数据!大小为'+IntToStr(num)+'字节');
// Memo2.Lines.Add(Socket.ReceiveText);
//StatusBar1.Panels[1].Text:='Data Received!The size of the file is '+IntToStr(num)+' bytes!';
showmessage('收到客户机发来的数据!');
StatusBar1.Panels[1].Text:='Data Received!';
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
if MessageDlg('确实要删除接收到的信息吗?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
Memo2.Lines.Clear;
end;
end;