📄 server.pas
字号:
unit server;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp, ComCtrls;
type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
Memo1: TMemo;
StatusBar1: TStatusBar;
ListBox1: TListBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
// procedure FormCreate(Sender: TObject);
procedure ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
expect_no:string;
corrupt:boolean;
loss:boolean;
implementation
{$R *.dfm}
procedure TForm1.ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText := '监听...';
end;
procedure TForm1.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText := '连接成功';
ListBox1.Items.Add( Socket.RemoteAddress );
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
infoFromClient:String;
begin
infoFromClient:=socket.ReceiveText;
if( expect_no=system.Copy(infoFromClient,1,1) ) and (system.Copy(infoFromClient,2,1)<>'Y') then
begin
Memo1.Lines.Append('Packet'+system.Copy(infoFromClient,1,1)+' 正确接收');
if (corrupt=false) and (loss=false) then
begin
Memo1.Lines.Append('ACK'+system.Copy(infoFromClient,1,1)+' 正确发送');
ServerSocket1.Socket.Connections[0].SendText(system.Copy(infoFromClient,1,1)+'N');
end
else
begin
if loss=true then
begin
Memo1.Lines.Append('ACK'+system.Copy(infoFromClient,1,1)+' 发送但丢失');
end;
if corrupt=true then
begin
Memo1.Lines.Append('ACK'+system.Copy(infoFromClient,1,1)+' 发送但被破坏');
ServerSocket1.Socket.Connections[0].SendText(system.Copy(infoFromClient,1,1)+'Y');
end;
end;
expect_no:=IntToStr((StrToInt(expect_no)+1)mod 10);
Memo1.Lines.Append('期待 Packet'+expect_no);
end
else
begin
if( expect_no=system.Copy(infoFromClient,1,1) ) and (system.Copy(infoFromClient,2,1)='Y') then
Memo1.Lines.Append('Packet'+system.Copy(infoFromClient,1,1)+'是期望的分组,但被破坏')
else
Memo1.Lines.Append('Packet'+system.Copy(infoFromClient,1,1)+'不是期望的分组,丢弃');
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
expect_no:='0';
corrupt:=false;
loss:=false;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
corrupt:=true;
loss:=false;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
loss:=true;
corrupt:=false;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
loss:=false;
corrupt:=false;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -