📄 servermain.~pas
字号:
unit ServerMain;
interface
uses
Windows, Messages, WinSock, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ImgList, ToolWin, XPMan, Menus, ExtCtrls;
const
WM_WORK1_ACCEPT = WM_USER + 12;
WM_WORK1_READ = WM_USER + 13;
type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ImageList1: TImageList;
XPManifest1: TXPManifest;
PopupMenu1: TPopupMenu;
N8: TMenuItem;
Panel1: TPanel;
ListBox1: TListBox;
Memo1: TMemo;
Splitter1: TSplitter;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ToolButton3Click(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure N8Click(Sender: TObject);
private
{ Private declarations }
procedure InitSocket;
procedure OnWork1Accept(Var message: TMessage); message WM_WORK1_ACCEPT;
procedure OnWork1Read(Var message: TMessage); message WM_WORK1_READ;
public
{ Public declarations }
end;
TCarCache = Record
Pzh: String[10];
Cz: String[20];
Zs: Integer;
end;
var
Form1: TForm1;
Server_Socket : Integer; //服务器Socket号码
Conn_Socket : Integer; //连接后Socket号码
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
//初始化
InitSocket;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
//释放WInSOck
WSACleanup();
end;
procedure TForm1.OnWork1Accept(var message: TMessage);
Var
Client_Addr: TSockAddr;
ClientLen: Integer;
begin
FillChar(Client_Addr,Sizeof(Client_Addr),0);
ClientLen := Sizeof(Client_Addr);
Conn_Socket := Accept(Server_Socket,@Client_Addr,@ClientLen);
StatusBar1.Panels[1].Text := '已连接';
ToolButton1.Enabled := true;
ToolButton3.Enabled := true;
//读取/关闭 事件
WSAAsyncSelect(Conn_Socket, Form1.Handle, WM_WORK1_READ, FD_READ or FD_CLOSE);
end;
procedure TForm1.OnWork1Read(var message: TMessage);
Var
Buff: String[100];
RET: Integer;
begin
CASE WSAGETSELECTEVENT(message.lParam) OF
FD_READ:
begin
Ret := Recv(Conn_Socket,Buff,Sizeof(Buff),0);
if Ret = SOCKET_ERROR then
begin
showmessage('Read Error!');
end
else if Ret > 0 then //接收
begin
ListBox1.Items.Add(Buff);
//返回
Send(Conn_Socket,Buff,Sizeof(Buff),0);
end;
end;
FD_CLOSE:
begin
StatusBar1.Panels[1].Text := '已断开';
ToolButton1.Enabled := false;
ToolButton3.Enabled := false;
end;
end;
end;
procedure TForm1.ToolButton3Click(Sender: TObject);
var
Buff: String[100];
i: Integer;
begin
for i := 0 to Memo1.Lines.Count - 1 do
begin
Buff := Memo1.Lines[i];
Send(Conn_socket,Buff,sizeof(Buff),0);
end;
Memo1.Clear;
end;
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
CloseSocket(Conn_socket);
StatusBar1.Panels[1].Text := '已断开';
ToolButton1.Enabled := false;
ToolButton3.Enabled := false;
end;
procedure TForm1.N8Click(Sender: TObject);
begin
ListBox1.Clear;
end;
procedure TForm1.InitSocket;
Var
XL_WSADATA:TWSADATA;
Sa: SockAddr_In;
RET:Integer;
begin
//初始化WinSock库
RET:=WSASTARTUP(MakeWord(2,2),XL_WSADATA);
IF RET=0 THEN
begin
//建立Sock
Server_Socket:=Socket(PF_INET,SOCK_STREAM,0);
IF Server_SOCKET=INVALID_SOCKET THEN
begin
Application.MessageBox('SOCKET创建失败','注意',mb_ok)
end;
//邦定
Sa.sin_family := PF_INET;
Sa.sin_port := Htons(8080);
Sa.sin_addr.s_addr := INADDR_ANY;
RET := Bind(Server_Socket,Sa,sizeof(Sa));
IF RET = SOCKET_ERROR then
begin
Application.MessageBox('SOCKET邦定失败!','注意',mb_ok)
end;
//监听
Ret := Listen(Server_Socket,1);
if Ret <> 0 then
begin
Application.MessageBox('监听失败!','错误信息',MB_OK);
Exit;
end;
//连接事件
WSAAsyncSelect(Server_Socket,Form1.Handle,WM_WORK1_ACCEPT,FD_ACCEPT);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -