要编写tcp/ip的交互通信用什么?怎样用?

proshyrain 2000-08-07 10:37:00
...全文
130 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
netsong 2000-08-07
  • 打赏
  • 举报
回复
在borland/delphi5/demos/intenet/chat 下有一个例子可以参考,用TServerSocket/TClientSocket控件。

以下是一些小程序:
unit ServerUnit;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, StdCtrls, ExtCtrls;

type
TServer = class(TForm)
ServerSocket1: TServerSocket;
lbMsg: TListBox;
lbLog: TListBox;
Label1: TLabel;
Label2: TLabel;
ShutOff: TButton;
SendMsg: TButton;
Edit1: TEdit;
Timer1: TTimer;
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure SendMsgClick(Sender: TObject);
procedure ShutOffClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Server: TServer;
clientsok: TServerClientWinSocket;

implementation
const
wm_refreshClients=wm_User;
{$R *.DFM}

procedure TServer.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
lbLog.Items.add(Socket.RemoteAddress);
showmessage('Connet: '+Socket.RemoteAddress);
PostMessage(Handle,wm_RefreshClients,0,0);
end;


procedure TServer.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
deleteip: string;
delnum: integer;
i: integer;
begin
deleteip:=Socket.RemoteAddress;
for i:=0 to lbLog.Items.Count-1 do
begin
if lbLog.Items[i]=deleteip then delnum:=i;
break;
end;
lbLog.Items.delete(delnum);
PostMessage(Handle,wm_RefreshClients,0,0);
end;


procedure TServer.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
lbMsg.Items.Add(Socket.RemoteAddress+': '+Socket.ReceiveText);
end;


procedure TServer.SendMsgClick(Sender: TObject);
var
i: integer;
clientselected: integer;
selectedip: string;
begin
clientselected:=-1;
for i := 0 to (lbLog.Items.Count - 1) do
if lbLog.Selected[i] then
begin
clientselected:= i;
selectedip:=lbLog.Items[clientselected];
break;
end;
if clientselected<0 then showmessage('Please select send object')
else
begin
ServerSocket1.Socket.Connections[clientselected].SendText('Server: '+edit1.text);
lbMsg.Items.Add('To '+selectedip+' : '+edit1.text);
end;
end;


procedure TServer.ShutOffClick(Sender: TObject);
var
i: integer;
clientselected: integer;
begin
clientselected:=-1;
for i := 0 to (lbLog.Items.Count - 1) do
begin
if lbLog.Selected[i] then clientselected:=i;
break;
end;
if clientselected<0 then showmessage('Please select an object')
else
begin
ServerSocket1.Socket.Connections[clientselected].Close;
lbLog.Items.Delete(clientselected);
end;
end;


procedure TServer.Timer1Timer(Sender: TObject);
begin
lbLog.Refresh;
end;

end.


unit ServerUnit;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ScktComp, StdCtrls, ExtCtrls;

type
TServer = class(TForm)
ServerSocket1: TServerSocket;
lbMsg: TListBox;
lbLog: TListBox;
Label1: TLabel;
Label2: TLabel;
ShutOff: TButton;
SendMsg: TButton;
Edit1: TEdit;
Timer1: TTimer;
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure SendMsgClick(Sender: TObject);
procedure ShutOffClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Server: TServer;
clientsok: TServerClientWinSocket;

implementation
const
wm_refreshClients=wm_User;
{$R *.DFM}

procedure TServer.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
lbLog.Items.add(Socket.RemoteAddress);
showmessage('Connet: '+Socket.RemoteAddress);
PostMessage(Handle,wm_RefreshClients,0,0);
end;


procedure TServer.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
deleteip: string;
delnum: integer;
i: integer;
begin
deleteip:=Socket.RemoteAddress;
for i:=0 to lbLog.Items.Count-1 do
begin
if lbLog.Items[i]=deleteip then delnum:=i;
break;
end;
lbLog.Items.delete(delnum);
PostMessage(Handle,wm_RefreshClients,0,0);
end;


procedure TServer.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
lbMsg.Items.Add(Socket.RemoteAddress+': '+Socket.ReceiveText);
end;


procedure TServer.SendMsgClick(Sender: TObject);
var
i: integer;
clientselected: integer;
selectedip: string;
begin
clientselected:=-1;
for i := 0 to (lbLog.Items.Count - 1) do
if lbLog.Selected[i] then
begin
clientselected:= i;
selectedip:=lbLog.Items[clientselected];
break;
end;
if clientselected<0 then showmessage('Please select send object')
else
begin
ServerSocket1.Socket.Connections[clientselected].SendText('Server: '+edit1.text);
lbMsg.Items.Add('To '+selectedip+' : '+edit1.text);
end;
end;


procedure TServer.ShutOffClick(Sender: TObject);
var
i: integer;
clientselected: integer;
begin
clientselected:=-1;
for i := 0 to (lbLog.Items.Count - 1) do
begin
if lbLog.Selected[i] then clientselected:=i;
break;
end;
if clientselected<0 then showmessage('Please select an object')
else
begin
ServerSocket1.Socket.Connections[clientselected].Close;
lbLog.Items.Delete(clientselected);
end;
end;


procedure TServer.Timer1Timer(Sender: TObject);
begin
lbLog.Refresh;
end;


end.

wsf 2000-08-07
  • 打赏
  • 举报
回复
用delphi自带的TServerSocket,TClientSocket控件

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧