|
欢迎您注册加入!这里有您将更精采!
您需要 登录 才可以下载或查看,没有账号?注册
x
- unit testEchoMain;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- Winsock, ExtCtrls, StdCtrls, ComCtrls;
-
- type
- TfrmMain = class(TForm)
- edtSend: TEdit;
- Label1: TLabel;
- btnSend: TButton;
- edtPort: TEdit;
- edtHostIP: TEdit;
- Label4: TLabel;
- Label3: TLabel;
- Bevel1: TBevel;
- edtEcho: TEdit;
- Label5: TLabel;
- btnConnect: TButton;
- btnDisConnect: TButton;
- StatusBar1: TStatusBar;
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure btnConnectClick(Sender: TObject);
- procedure btnDisConnectClick(Sender: TObject);
- procedure btnSendClick(Sender: TObject);
-
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- frmMain: TfrmMain;
- socket1:TSocket;
-
- implementation
-
- {$R *.DFM}
-
- procedure TfrmMain.FormCreate(Sender: TObject);
- var
- WSAData:TWSAData;
- begin
- //初始化Socket
- if (WSAStartup(MAKEWORD(2,0),WSAData)<>0) then
- begin
- //初始化失败
- StatusBar1.SimpleText:='Init Failed';
- exit;
- end
- else
- StatusBar1.SimpleText:='Init Success';
- end;
-
- procedure TfrmMain.FormDestroy(Sender: TObject);
- begin
- //释放winsock
- WSACleanUP();
- end;
-
- procedure TfrmMain.btnConnectClick(Sender: TObject);
- var
- SocketAddr:TSockAddr;
- Re:Integer;
- begin
- //建立socket
- socket1:=socket(AF_INET,SOCK_STREAM,0);
- if(socket1=INVALID_SOCKET)then
- begin
- StatusBar1.SimpleText:='错误:建立socket失败';
- exit;
- end;
- //连接主机
- ZeroMemory(@SocketAddr,sizeof(SocketAddr));
- SocketAddr.sin_family :=AF_INET;
- SocketAddr.sin_addr.s_addr :=inet_addr(Pchar(edtHostIP.Text));
- SocketAddr.sin_port:=htons(StrToInt(edtPort.Text));
- Re := connect(socket1,SocketAddr,sizeof(SocketAddr));
- if(Re<>0)then
- begin
- StatusBar1.SimpleText:='连接服务器失败';
- exit;
- end;
- //连接主机成功
- StatusBar1.SimpleText:='连接主机成功';
- end;
-
- procedure TfrmMain.btnDisConnectClick(Sender: TObject);
- var
- re,err:integer;
- info:string;
- begin
- // 关闭
- re:=closesocket(socket1);
- // 判断关闭socket结果
- if re=SOCKET_ERROR then
- begin
- err:=WSAGetLastError();
- case err of
- WSANOTINITIALISED:info:='请先调用WSAStartup';
- WSAENETDOWN:info:='网络子系统失败';
- WSAENOTSOCK:info:='描述符不是socket对象';
- WSAEINPROGRESS:info:='Socket忙';
- WSAEINTR:info:='通过WSACancelBlockingCall取消操作';
- WSAEWOULDBLOCK:info:='超时值过大';
- end;
- end
- else
- Info:='成功关闭socket';
- StatusBar1.SimpleText:=info;
- end;
-
- procedure TfrmMain.btnSendClick(Sender: TObject);
- var
- Info:string;
- BufSend,BufRecv:pchar;
- Re:Integer;
- begin
- //发送消息
- GetMem(BufSend,1024);
- ZeroMemory(BufSend,1024);
- Info:=edtSend.Text;
- StrPCopy(BufSend,Info);
- Re:=send(socket1,BufSend^,Length(BufSend),0);
- if(Re=SOCKET_ERROR)then
- begin
- StatusBar1.SimpleText:='发送数据失败';
- exit;
- end;
- //接收消息
- GetMem(BufRecv,1024);
- ZeroMemory(bufRecv,1024);
- re := recv(socket1, BufRecv^, 1024, 0);
- Info:=StrPas(bufRecv);
- edtEcho.Text:=Info;
- //释放pchar变量
- FreeMem(BufSend);
- FreeMem(BufRecv);
- end;
-
- end.
复制代码 |
|