Socket控件问题,我出60分,谢谢 我要用Socket控件写一个文本聊天程序。请问该如何下手,请帮忙讲讲谢谢大家! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 标题出60分,结果只给了50分,呵呵www.2ccc.com有源码啊,自己下载了看 你在www.2ccc.com里面搜索一下“聊天”就看到了啊 您好,我刚刚看了,上面好像没有用socket控件写的程序 那你下载这个源码吧http://www.tomore.com/1/34342.html下面是下载地址http://down1.tomore.com/source/20051011/2005101119182510556.rar unit server;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, SUIButton, StdCtrls, SUIMemo, ExtCtrls, SUIForm, ScktComp;type TForm_server = class(TForm) suiForm1: TsuiForm; GroupBox1: TGroupBox; suiMemo_read: TsuiMemo; GroupBox2: TGroupBox; suiMemo_send: TsuiMemo; suiButton1: TsuiButton; ServerSocket1: TServerSocket; suiButton2: TsuiButton; procedure ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure FormCreate(Sender: TObject); procedure suiButton1Click(Sender: TObject); procedure ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure ServerSocket1Listen(Sender: TObject; Socket: TCustomWinSocket); procedure suiButton2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form_server: TForm_server; SockPool:TList;implementationuses client;{$R *.dfm}procedure TForm_server.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);begin SockPool.Add(Socket); //self.suiMemo1.Lines.Add('Client Connected:'+Socket.RemoteAddress);end;procedure TForm_server.FormCreate(Sender: TObject);begin SockPool:=TList.Create; // form_client.Show;end;procedure TForm_server.suiButton1Click(Sender: TObject);var i,len:word; msg:string; buf:array of char;begin msg:=Trim(self.suiMemo_send.Text); len:=length(msg); setlength(buf,len+2); //设置buf长度 //前两个字节存放消息体内容长度 Move(len, buf[0], 2) ; //把消息体内容长度放入前两个字节 Move(msg[1], buf[2], len); //把消息体内容放入包中 从第三个字节开始存放 if SockPool.Count < 1 then Exit; //tlist for i:=0 to SockPool.Count -1 do try TCustomWinSocket(SockPool[i]).SendBuf(buf[0], len+2); except TCustomWinSocket(SockPool[i]).Close; SockPool.Remove(SockPool[i]); end;end;//end;procedure TForm_server.ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);begin SockPool.Remove(Socket);end;procedure TForm_server.FormClose(Sender: TObject; var Action: TCloseAction);Var i:Integer;begin For i:=SockPool.Count-1 DownTO 0 do SockPool.Delete(i); FreeAndNil(SockPool);end;procedure TForm_server.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);var len:Word; Buf : array of char; Msg : String;begin //收到一次信息后 还会侦听一次 try Socket.ReceiveBuf(len,2); //前两个字节存放消息体内容长度 if Len < 1 then Exit; SetLength(buf,len); Socket.ReceiveBuf(Buf[0],len); setlength(msg, len); move(buf[0],Msg[1],len); //if msg='' then Exit; self.suiMemo_read.Lines.Add(Socket.LocalHost+':'+Msg); len :=0; except end; end;procedure TForm_server.ServerSocket1Listen(Sender: TObject; Socket: TCustomWinSocket);begin //self.suiMemo1.Lines.Add('Listen:'+Socket.RemoteAddress);end;procedure TForm_server.suiButton2Click(Sender: TObject);begin self.close; form_client.Close;end;end. 最简单的是delphi自带的chat例子,呵呵 P2P外网给内网发送消息失败的原因有哪些? 局域网中如何在无客户端情况下远程推送文件及运行文件? 大家帮我看看 我的sql语句错在哪里? 如何禁止上网和断开网络? 如何改变一个panel内所有组件的某一属性? 文本文件读入数据库 税控机输出的文本文件两列中间的字符是什么?或者说如何分割? 請教:ShellExecute有沒有辦法控制打印頁數及打印份數? 如何让qreport (band)footpage贴近(band)rbtail ? 不用第三方工具,如何编程实现在内存中建立一个虚拟盘? 求一简单的SQL语句 请教算法
http://down1.tomore.com/source/20051011/2005101119182510556.rar
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, SUIButton, StdCtrls, SUIMemo, ExtCtrls, SUIForm, ScktComp;type
TForm_server = class(TForm)
suiForm1: TsuiForm;
GroupBox1: TGroupBox;
suiMemo_read: TsuiMemo;
GroupBox2: TGroupBox;
suiMemo_send: TsuiMemo;
suiButton1: TsuiButton;
ServerSocket1: TServerSocket;
suiButton2: TsuiButton;
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure FormCreate(Sender: TObject);
procedure suiButton1Click(Sender: TObject);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket); procedure ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
procedure suiButton2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form_server: TForm_server;
SockPool:TList;
implementationuses client;{$R *.dfm}procedure TForm_server.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
SockPool.Add(Socket);
//self.suiMemo1.Lines.Add('Client Connected:'+Socket.RemoteAddress);
end;procedure TForm_server.FormCreate(Sender: TObject);
begin
SockPool:=TList.Create;
// form_client.Show;
end;procedure TForm_server.suiButton1Click(Sender: TObject);var
i,len:word;
msg:string;
buf:array of char;
begin
msg:=Trim(self.suiMemo_send.Text);
len:=length(msg);
setlength(buf,len+2); //设置buf长度 //前两个字节存放消息体内容长度
Move(len, buf[0], 2) ; //把消息体内容长度放入前两个字节
Move(msg[1], buf[2], len); //把消息体内容放入包中 从第三个字节开始存放
if SockPool.Count < 1 then Exit; //tlist
for i:=0 to SockPool.Count -1 do
try
TCustomWinSocket(SockPool[i]).SendBuf(buf[0], len+2);
except
TCustomWinSocket(SockPool[i]).Close;
SockPool.Remove(SockPool[i]);
end;
end;
//end;procedure TForm_server.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
SockPool.Remove(Socket);
end;procedure TForm_server.FormClose(Sender: TObject;
var Action: TCloseAction);
Var
i:Integer;
begin
For i:=SockPool.Count-1 DownTO 0 do
SockPool.Delete(i);
FreeAndNil(SockPool);
end;procedure TForm_server.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
len:Word;
Buf : array of char;
Msg : String;
begin //收到一次信息后 还会侦听一次
try
Socket.ReceiveBuf(len,2); //前两个字节存放消息体内容长度
if Len < 1 then Exit;
SetLength(buf,len);
Socket.ReceiveBuf(Buf[0],len);
setlength(msg, len);
move(buf[0],Msg[1],len);
//if msg='' then Exit;
self.suiMemo_read.Lines.Add(Socket.LocalHost+':'+Msg);
len :=0;
except end;
end;procedure TForm_server.ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
begin
//self.suiMemo1.Lines.Add('Listen:'+Socket.RemoteAddress);
end;procedure TForm_server.suiButton2Click(Sender: TObject);
begin
self.close;
form_client.Close;
end;end.