给现在为SOCK头疼的人

wofan 2004-08-31 03:10:50
相信对你们会有所帮助。把以下的代码改一改就可以加入到你们的程序中了

如果认为还行的话就顶一下吧





SERVER
==========================================================================================
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Button2: TButton;
Label2: TLabel;
Label3: TLabel;
Edit3: TEdit;
Label4: TLabel;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
ServerSocket: TServerSocket;
end;

var
Form1: TForm1;

implementation
var
count:integer;
id:boolean;
fname:string;
fsize:integer;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin
ServerSocket:=TServerSocket.Create(Self);

ServerSocket.Active:=False;
ServerSocket.Port:=1024;
ServerSocket.ServerType:=stNonBlocking;
ServerSocket.OnClientConnect:=ServerSocketClientConnect; //ONCE TEHER ARE CONNECTIONS
ServerSocket.OnClientDisconnect:=ServerSocketClientDisconnect;
ServerSocket.OnClientRead:=ServerSocketClientRead;
button2.Enabled:=false;
count:=0;
id:=false;




end;

procedure TForm1.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
i,j,p1,p2,p3:integer;

st,st1:string;
buf:pointer;
fs:tfilestream;
begin

if(id) then
begin
id:=false;
fs:=Tfilestream.Create('d:\ftp\'+fname,fmCreate or fmOpenWrite);
getmem(buf,fsize);
Socket.ReceiveBuf(buf^,fsize);
fs.Write(buf^,fsize);
freemem(buf);
fs.Free;
end;
edit1.Text:=Socket.RemoteHost;
edit2.Text:=Socket.RemoteAddress;
if(not id) then
st1:=socket.ReceiveText;
edit3.Text:=st1;
if(pos('/',st1)>0) then
begin
id:=true;
p1:=1;
p2:=pos('*',st1);
p3:=pos('a',st1);
fname:=copy(st1,2,p2-p1-1);
fsize:=strtoint(copy(st1,p2+1,p3-p2-1));
showmessage(fname+'--'+inttostr(fsize));
end;


end;

procedure TForm1.ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
showmessage('server :one client cinnect');
end;
procedure TForm1.ServerSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
showmessage('server :one client discinnect');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
inc(count);
if(count=1) then
begin
ServerSocket.Active:=true;
button1.Enabled:=false;
button2.Enabled:=true;
end
else
begin
count:=100;
ServerSocket:=TServerSocket.Create(Self);
ServerSocket.Active:=False;
ServerSocket.Port:=1024;
ServerSocket.ServerType:=stNonBlocking;
ServerSocket.OnClientConnect:=ServerSocketClientConnect; //ONCE TEHER ARE CONNECTIONS
ServerSocket.OnClientDisconnect:=ServerSocketClientDisconnect;
ServerSocket.OnClientRead:=ServerSocketClientRead;
ServerSocket.Active:=true;
button1.Enabled:=false;
button2.Enabled:=true;
end;


end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ServerSocket.Active:=false;
ServerSocket.Free;
button1.Enabled:=true;
button2.Enabled:=false;


end;

procedure TForm1.Button3Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to ServerSocket.socket.ActiveConnections-1 do
begin
if ServerSocket.Socket.Connections[i].RemoteAddress='127.0.0.1' then
ServerSocket.Socket.Connections[i].SendText('from server to 10.119.148.68');
end;
end;

end.

==========================================================================================




CLIENT
******************************************************************************************
unit Unit1;

interface

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



type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ClientSocketDisconnect(Sender: TObject;Socket: TCustomWinSocket);
procedure ClientSocketRead(Sender: TObject;Socket: TCustomWinSocket);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public

ClientSocket: TClientSocket;

{ Public declarations }
end;

var
Form1: TForm1;

implementation
var
fname:string;
fsize:integer;

{$R *.DFM}



{close socket when close form}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ClientSocket.Active := False;

end;

{display connection information}
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket.Active := true;
button1.Enabled:=false;
button4.Enabled:=true;
button2.Enabled:=true;
button3.Enabled:=false;

end;



procedure TForm1.ClientSocketDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
showmessage('CLIENT:disconnect event!'); // server close or client disconnect
end;

procedure TForm1.FormCreate(Sender: TObject);

begin
ClientSocket:=TClientSocket.Create(Self); ///DYNAMIC CREATE TCLIENT SCOEKT

ClientSocket.Active:=False;
ClientSocket.Address:= '10.32.100.93';
ClientSocket.ClientType:=ctNonBlocking;
ClientSocket.Port:=1024;
ClientSocket.OnDisconnect:=ClientSocketDisconnect;
ClientSocket.OnRead:=ClientSocketRead;
button1.Enabled:=true;
button4.Enabled:=false;
button2.Enabled:=false;
button3.Enabled:=false;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
fs:Tfilestream;
senddata:string;
begin
if(not OpenDialog1.Execute) then exit;
fname:=OpenDialog1.FileName;
fs:=Tfilestream.Create(fname,fmopenread);
fsize:=fs.Size;
fs.Free;
button2.Enabled:=false;
button3.Enabled:=true;
senddata:='/'+extractfilename(fname)+'*'+inttostr(fsize)+'a';

ClientSocket.Socket.SendText(senddata);
end;

procedure TForm1.Button3Click(Sender: TObject);

var
fs:Tfilestream;
buf:pointer;
begin

fs:=Tfilestream.Create(fname,fmopenread);
getmem(buf,fsize);
fs.Read(buf^,fsize);
ClientSocket.Socket.SendBuf(buf^,fsize);
freemem(buf);
fs.Free;


button2.Enabled:=true;
button3.Enabled:=false;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
ClientSocket.Active := false;
button1.Enabled:=true;
button4.Enabled:=false;
end;

procedure TForm1.ClientSocketRead(Sender: TObject;Socket: TCustomWinSocket);
begin
//showmessage('read'+ClientSocket.Socket.re);
showmessage( ClientSocket.Socket.ReceiveText);
end;

end.

******************************************************************************************
...全文
549 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
coding8848 2005-09-09
  • 打赏
  • 举报
回复
初级的socket嘛
chendetiger 2005-09-09
  • 打赏
  • 举报
回复
哈吼!顶~~
jlbnet 2005-09-09
  • 打赏
  • 举报
回复
精神可嘉,顶一下
hbnu02151 2005-09-06
  • 打赏
  • 举报
回复
强悍
hanlin2004 2005-09-06
  • 打赏
  • 举报
回复
Larry1030 2005-09-06
  • 打赏
  • 举报
回复
楼主起码精神可嘉!
顶!
ffanpeng 2005-09-05
  • 打赏
  • 举报
回复
收藏
fffddd 2005-08-29
  • 打赏
  • 举报
回复
顶阿德!!!
solonet 2005-08-28
  • 打赏
  • 举报
回复
701701()
牛兄,顶一下。
阿呆_ 2005-08-27
  • 打赏
  • 举报
回复
很不实用的例子. 完全没有考虑错误处理和收发的分包与组包.
Blakhawk 2005-08-27
  • 打赏
  • 举报
回复
老兄,如果换成底层的TSocket怎么来实现文件传输啊。
我现在刚好遇到这个问题,希望通过底层传送文件,请指教。
Rex_love_Burger 2004-09-09
  • 打赏
  • 举报
回复
精神可佳!!:)我顶!!!
wany97 2004-09-08
  • 打赏
  • 举报
回复
尽管我也会基础的,收藏
ghy412 2004-09-08
  • 打赏
  • 举报
回复
收藏!
myling 2004-09-08
  • 打赏
  • 举报
回复
楼主肯把东西拿出来共享

精神很可嘉阿

论坛需要这种人


701701() :
可能你的技术真的很好,谦虚点,大家会更加佩服你的:)


扯远了,再顶
ffjf 2004-09-08
  • 打赏
  • 举报
回复
偶顶你个牛牛呦,牛牛快发话撒。
myling 2004-09-08
  • 打赏
  • 举报
回复
楼上……

真是牛人说牛话

呵呵
701701 2004-09-08
  • 打赏
  • 举报
回复
垃圾啊!

首先不明白你解决了什么问题!
我看看只不过是个很普通的例子啊

本人擅长sock API和socket组件
适合于窗口模式和控制台模式的编写经验

顶的话,我将传授经验
JOINCHINA 2004-09-08
  • 打赏
  • 举报
回复
mark
leilu 2004-09-08
  • 打赏
  • 举报
回复
就是啊,没有注释啊,我也在研究SOCKET了。
加载更多回复(11)

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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