/////////////////////////////////////////////////////////////
//本程序是控制台下面的serversocket组件,用于监听本机701端口
// 问题:socket接收不对数据??????????????????????????????
//////////////////////////////////////////////////////////////
program Myserver;{$APPTYPE CONSOLE} uses
SysUtils,ScktComp,windows;type
TEvents = class
public
procedure ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientError(Sender: TObject; Socket: TCustomWinSocket;ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ClientRead(Sender: TObject; Socket: TCustomWinSocket);
end; var
Events : TEvents;
input: String;
Client: TServerSocket;
{------------------------------------------------------------------------------}
procedure Screate;stdcall;
begin
Events := TEvents.Create;
Client := TserverSocket.Create(nil);
Client.serverType := stNonBlocking;
Client.OnClientError := Events.ClientError;
Client.OnClientRead := Events.ClientRead;
end;procedure listen();
begin
if Client = nil then
begin
Events := TEvents.Create;
Client := TserverSocket.Create(nil);
Client.serverType := stNonBlocking;
Client.OnClientDisconnect := Events.ClientDisconnect;
Client.OnClientError := Events.ClientError;
Client.OnClientRead := Events.ClientRead;
end;Client.Port := 701;
if Client.Active = false then
begin
writeln('begin listing...');
Client.Active := true;
end
else
writeln('already listened');
end;
procedure sendout(data: String);
begin
try
begin
Client.Socket.SendText(data +#13+#10);
end;
except
writeln('cannot send to host...');
end;
end;
{------------------------------------------------------------------------------} procedure TEvents.ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
//OnError
messagebox (0,'发送错误','报告',mb_ok);
writeln('Error Code: ' + inttostr(ErrorCode));
end; procedure TEvents.ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
incoming: String;
begin
//OnRead
messagebox (0,'收到消息','报告',mb_ok);
incoming := Socket.ReceiveText;
writeln(incoming);
end; {------------------------------------------------------------------------------}
{main code here}
begin
writeln(' ServerSocket组件监听器 ');
writeln('监听本机端口701 ');
writeln('********************************');
writeln('命令:');
writeln(' l listen 开始监听');
writeln(' d disconnect 断开连接');
writeln(' . 发送文本');
writeln(' q quit 退出程序');
writeln('********************************');
Screate;
{catch commands}
while (lowercase(input) <> 'quit') do
begin
write('命令:');
readln(input);
if input='' then continue;
if (lowercase(Copy(input,1,1)) = 'q') then
begin
writeln('good bye');
end
else
if (lowercase(Copy(input,1,1)) = 'l') then
begin
listen;
end else
if (lowercase(copy(input,1,1)) = 'd') then
begin
disconnect;
end else
if (Copy(input,1,1) = '.') then
begin
if Copy(input,2,length(input)-1) <> '' then
begin
sendout(Copy(input,2,length(input)-1));
end
else
begin
writeln('Syntax: .<text>');
end;
end else
begin
writeln('not a command');
end; end;
end.
//本程序是控制台下面的serversocket组件,用于监听本机701端口
// 问题:socket接收不对数据??????????????????????????????
//////////////////////////////////////////////////////////////
program Myserver;{$APPTYPE CONSOLE} uses
SysUtils,ScktComp,windows;type
TEvents = class
public
procedure ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
procedure ClientError(Sender: TObject; Socket: TCustomWinSocket;ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ClientRead(Sender: TObject; Socket: TCustomWinSocket);
end; var
Events : TEvents;
input: String;
Client: TServerSocket;
{------------------------------------------------------------------------------}
procedure Screate;stdcall;
begin
Events := TEvents.Create;
Client := TserverSocket.Create(nil);
Client.serverType := stNonBlocking;
Client.OnClientError := Events.ClientError;
Client.OnClientRead := Events.ClientRead;
end;procedure listen();
begin
if Client = nil then
begin
Events := TEvents.Create;
Client := TserverSocket.Create(nil);
Client.serverType := stNonBlocking;
Client.OnClientDisconnect := Events.ClientDisconnect;
Client.OnClientError := Events.ClientError;
Client.OnClientRead := Events.ClientRead;
end;Client.Port := 701;
if Client.Active = false then
begin
writeln('begin listing...');
Client.Active := true;
end
else
writeln('already listened');
end;
procedure sendout(data: String);
begin
try
begin
Client.Socket.SendText(data +#13+#10);
end;
except
writeln('cannot send to host...');
end;
end;
{------------------------------------------------------------------------------} procedure TEvents.ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
//OnError
messagebox (0,'发送错误','报告',mb_ok);
writeln('Error Code: ' + inttostr(ErrorCode));
end; procedure TEvents.ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
incoming: String;
begin
//OnRead
messagebox (0,'收到消息','报告',mb_ok);
incoming := Socket.ReceiveText;
writeln(incoming);
end; {------------------------------------------------------------------------------}
{main code here}
begin
writeln(' ServerSocket组件监听器 ');
writeln('监听本机端口701 ');
writeln('********************************');
writeln('命令:');
writeln(' l listen 开始监听');
writeln(' d disconnect 断开连接');
writeln(' . 发送文本');
writeln(' q quit 退出程序');
writeln('********************************');
Screate;
{catch commands}
while (lowercase(input) <> 'quit') do
begin
write('命令:');
readln(input);
if input='' then continue;
if (lowercase(Copy(input,1,1)) = 'q') then
begin
writeln('good bye');
end
else
if (lowercase(Copy(input,1,1)) = 'l') then
begin
listen;
end else
if (lowercase(copy(input,1,1)) = 'd') then
begin
disconnect;
end else
if (Copy(input,1,1) = '.') then
begin
if Copy(input,2,length(input)-1) <> '' then
begin
sendout(Copy(input,2,length(input)-1));
end
else
begin
writeln('Syntax: .<text>');
end;
end else
begin
writeln('not a command');
end; end;
end.
解决方案 »
- Ctrl+鼠标滚轮怎么实现?
- 当执行某一事件的时候会对多个数据表进行操作,如何保证其完整性?
- 求一个上传下载文件的例.
- 应用程序在执行数据查询时,怎么样实现等待进度条?DBgridEh用本地过滤功能(stfilter)在代码里如何实现清空条件?
- 大家来看看,我想实现这一功能,该怎么做?
- 帮哥们一把。
- delphi6中记录行指针参数传递问题。
- 怎样处理空值 oracle数据库 ado组件 三层结构
- 如何屏蔽掉Enabled为False的工具按钮的快捷键(如:F5),多谢!!
- 新手问题,关于系统托盘!
- Delphi7中,局域内的两台电脑间怎么通信?
- delphi中ole调用excel的问题,急!!!
看着好奇怪阿,你不是定义Client: TServerSocket;嘛?应该是在收到connect后做这种事阿procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendText('');
end;
ServerSocket1.Socket.Connections[i].SendText否则怎么发给谁阿
应该是
procedure TForm1.ClientClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.SendText('');
//或
Client.Socket.Connections[i].SendText('');
end;
对不起,我不知道怎么送分给你,也不知道你收到了没有?本人有个疑问:
Client.Socket.Connections[i].SendText('');
参数i我应该怎么设置?
特别是当多个客户端了连接的时候,怎么用参数i确定当前请求的客户端?