社区
Delphi
帖子详情
我想做一个这样的软件~~~不知道该怎么办?
zxyufan
2001-05-27 11:15:00
主要是需要一些我很欠缺的网络方面的知识,所以来问一下各位高手。
软件的功能需求是这样的:
两台或多台局域网内(同一工作组)的机器,实现类似于oicq的通讯功能,
当然不需要太复杂的功能,可以在主窗体上显示当前工作组内在线的机器名
并且可以向同工作组的其他机器发送消息,自然也可以回复。
这样就可以了~~
望高手指点~~~不胜感激~~~!
...全文
71
7
打赏
收藏
我想做一个这样的软件~~~不知道该怎么办?
主要是需要一些我很欠缺的网络方面的知识,所以来问一下各位高手。 软件的功能需求是这样的: 两台或多台局域网内(同一工作组)的机器,实现类似于oicq的通讯功能, 当然不需要太复杂的功能,可以在主窗体上显示当前工作组内在线的机器名 并且可以向同工作组的其他机器发送消息,自然也可以回复。 这样就可以了~~ 望高手指点~~~不胜感激~~~!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zxyufan
2001-05-27
打赏
举报
回复
太感谢了~~!!!~~~!!!
可以说说怎么加分给你们吗??
不要分特啊~~我才来的~~还不明白~~
yypp
2001-05-27
打赏
举报
回复
获得网上邻居列表的程序
程序如下:
var
i : Integer;
ErrCode : Integer;
NetRes : Array[0..1023] of TNetResource;
EnumHandle : Thandle;
EnumEntries : Dword;
BufferSize : Dword;
ComputerIP,ComputerName:String;
begin
//try
With NetRes[0] do begin
dwScope :=RESOURCE_GLOBALNET;
dwType :=RESOURCETYPE_ANY;
dwDisplayType :=RESOURCEDISPLAYTYPE_DOMAIN;
dwUsage :=RESOURCEUSAGE_CONNECTABLE;
lpLocalName :=NIL;
lpRemoteName :=NIL;
lpComment :=NIL;
lpProvider :=NIL;
end;
{ get net root }
ErrCode:=WNetOpenEnum(
RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
RESOURCEUSAGE_CONTAINER,
@NetRes[0],
EnumHandle
);
If ErrCode=NO_ERROR then begin
EnumEntries:=1;
BufferSize:=SizeOf(NetRes);
ErrCode:=WNetEnumResource(EnumHandle,EnumEntries,@NetRes[0],BufferSize);
WNetCloseEnum(EnumHandle);
ErrCode:=WNetOpenEnum(
RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
RESOURCEUSAGE_CONNECTABLE,
@NetRes[0],
EnumHandle
);
EnumEntries:=1024;
BufferSize:=SizeOf(NetRes);
ErrCode:=WNetEnumResource(
EnumHandle,
EnumEntries,
@NetRes,
BufferSize
);
for i:=0 to 1023 do
if NetRes[i].lpRemoteName='' then Exit
else begin
ComputerName:=Copy(NetRes[i].lpRemoteName,3,Length(NetRes[i].lpRemoteName)-2);
ComputerIP:=GetIP(ComputerName);
ShowMessage('计算机名' + NetRes[i].lpRemoteName + chr(13)
+ '计算机说明:' + NetRes[i].lpComment + chr(13)
+ 'IP地址:' + ComputerIP);
end;
end;
*************
sundayboys
2001-05-27
打赏
举报
回复
使用TCP/IP协议实现聊天程序
TCP/IP协议的传输即面向点到点的传输方式!
1.创建应用程序。
选择"NEW"菜单下的"Application"选项,创建一个普通的应用程序。
2.创建所需控件。
首先在控件栏的Win32页中选择ImageList控件和CoolBar控件,再从Win32栏选择ToolBar控件放置到CoolBar
控件上。用鼠标右键单击"ImageList"控件,在弹出的菜单中选择"ImageList Editer..."选项,弹出
"ImageList Editer"对话框,单击"Add..."按钮,选择5幅位图。在对象管理器Object Inspector中将
ToolBar控件的Image属性设为"ImageList1",用鼠标右键单击"ToolBar"控件,选"New Button"选项,
总共创建5个ToolButton,在 对象管理器中将5个ToolButton的ImageIndex属性分别设置为0,1,2,3,4。
此时ImageList控件中的5幅位图将会分别显示在Toolbutton上,将5个ToolButton控件的ShowHint属性全都设
置为"ture",并将它们的Hint属性分别设置为"监听"、"连接"、"断开连接"、"更改你的昵称"和
"退出聊天程序"。
然后在窗体中放置一个Edit控件、Memo控件、StatusBar控件和一个Label控件。将Label控件的Caption属性
设置为"输入框"。
最后,也是最关键的,在控件栏的Internet页中选择SeverSocket控件和ClientSocket控件放置在窗体中,将
SeverSocket控件和ClientSocket控件的Port属性设置为"1100"。SeverSocket控件是基于TCP/IP协议传输
的服务器方的控件,它的主要作用是用来监听其它基于TCP/IP传输计算机的连接请求,并在收到连接请求时
建立连接,进行数据传输,ClientSocket控件是基于TCP/IP传输的客户方的控件,它的主要作用是向监听
TCP/IP传输的服务器发出连接请求,在收到服务器的允许连接的响应后,建立连接,并传输数据,之所以在
窗体中同时创建ServerSocket和ClientSocket控件,是因为应用程序既可作为服务器,又可作为客户端使用。
3.Serversocket和ClientSocket之间的连接
首先设置两个全局变量:
NickName:string;
b_Client:boolean;
其中NickName用于放聊天人的名称,b_Client用于表明应用程序是否作为客户端进行数据传输。
在窗体Form1的Oncreate事件中初始化变量,代码如下:
procedure TForm1.FormCreate(Sender:TObject);
begin
NickName:+="我的昵称";
b_Client:=ture;
end;
双击ToolButton1,编写服务器监听代码如下:
procedure TForm1.Toolbutton1Click(Sender:TObject);
begin
ClientSocket1.close;
ServerSocket1.open;
StatusBar1.SimpleText:='开始监听';
end;
双击ToolButton2,编写客户的申请连接,代码如下:
procedure TForm1.ToolButton2Click(Sender:TObject);
var s:string;
begin
if Clientsocket1.Active then
ClientSocket1.close;
if InputQuery('连接到计算机','要连接的计算机名称或IP地址:',s) then
if Length(s)>0 then
with ClientSocket1 do
begin
Host:=s;
open;
end;
end;
在对象管理器中,双击ClientSocket事件页的OnConnecting事件,编写处理客户等待连接请求,代码
如下:
procedure TForm1.ClientSocket1Connecting(Sender:TObject;Socket:TCustomWinSocket);
begin
StatusBar1.SimpleText:='等待来自'+Socket.RemoteAddress+'的连接允许响应...';
end;
在对象管理器中,双击SeverSocket事件页的OnAccept事件,处理服务器响应连接事件,代码如下:
procedure TForm1.SeverSocket1Accept(Sender:TObject;Socket:TCustomWinSocket);
begin
b_Client:=false;
StatusBar1.SimpleText:='连接到'+Socket.RemoteAddress;
end;
在对象管理器中,双击ClientSocket事件页的OnConnect事件,OnConnect事件在连接成功时被调用,代码如下:
procedure TForm1.ClientSocket1Connect(Sender:TObject;Socket:TCustomWinSocket);
begin
b_Client:=ture;
StatusBar1.SimpleText:='连接成功';
end;
4.ServerSocket和ClientSocket之间的数据传输
聊天的内容是通过Edit控件输入并在敲回车键后显示在Memo控件中,再传输到与之连接的计算机中。
Edit的OnKeyDown事件代码如下:
procedure TForm1.Edit1KeyDown(Sender:TObject;var Key:Word;Shift:TShiftState);
begin
if Key=VK_Return then
begin
Memo1.Lines.Add(NickName+':'+Edit1.Text0;
if b_Client then
ClientSocket1.Socket.SendText(Memo1.Lines[Memo1.lines.Count-1])
else
ServerSocket1.Socket.Connections[0].SendText(Memo1.Lines[Memo1.lines.Count-1]);
end;
end;
在ServerSocket控件的onread事件中编写服务器接收到数据后的动作,代码如下:
procedure TForm1.ServerSocket1ClientRead(Sender:TObject;Socket:TCustomWinSocket);
begin
Memo1.lines.Add(Socket.ReceiveText);
end;
在ClientSocket控件的onread事件中编写客户端接收到数据后的动作,代码如下:
procedure TForm1.ClientSocket1Read(Sender:TObject;Socket:TCustomWinSocket);
begin
Memo1.lines.Add(Socket.ReceiveText);
end;
5.断开Serversocket和ClientSocket之间的连接
双击ToolButton3,编写客户端断开的处理过程,代码如下:
procedure TForm1.ToolButton3Click(Sender:TObject);
begin
ClientSocket1.close;
StatusBar1.SimpleText:='断开连接';
end;
编写服务器响应客户端断开的处理过程,代码如下:
procedure TForm1.ServerSocket1ClientDisconnect(Sender:TObject;Socket:TCustomWinSocket);
begin
SeverSocket1.close;
StatusBar1.SimpleText:='断开连接';
end;
6.更改聊天者的昵称
双击Toolbutton4,编写更改昵称代码如下:
procedure TForm1.ToolButton4Click(sender:TObject);
var
s:string;
begin
if InputQuery('更改昵称','你的新昵称',s) then
if Length(s)>0 then
NickName:=s;
end;
7.退出应用程序
双击Toolbutton5,编写退出应用程序代码如下:
procedure TForm1.ToolButton5Click(sender:TObject);
ClientSocket1.close;
ServerSocket1.close;
Form1.close;
end;
8.保存并运行应用程序
最好在网上运行该程序,如果没联网,但你的计算机支持TCP/IP协议(可以通过网络邻居安装TCP/IP协议),
你可以在你的计算机上从"我的电脑"中运行该应用程序的两个实例。运行后,将一个聊天程序作为服务器监
听,另一个聊天程序作为客户与服务器连接并聊天。局域网中同样可以运行!!!
zxyufan
2001-05-27
打赏
举报
回复
能稍微具体说说吗~~~
不方便的话能告诉我应该查阅一些什么资料吗~~~
sundayboys
2001-05-27
打赏
举报
回复
用udp协议,要是可靠,就用tcp协议,你可用看看以前的帖子。实在不不行就用oicq搜索一下。
zxyufan
2001-05-27
打赏
举报
回复
关键是我不知道怎样取得局域网里工作组里的机器名和相应的IP,以及怎样实现信息传递~~我对网络通讯是白痴~~~
望指教~~定加高分!
yypp
2001-05-27
打赏
举报
回复
实现起来比较简单。。。。只要取得局域网里工作组里的机器名和相应的IP
然后就一个SendText就可以搞定
区块链之Go语言设计模式
在朋友聚会上碰到了
一个
美女Sarah,从拉斯维加斯来的,可我不会说粤语,她不会说普通话,只好求助于我的朋友kent了,他作为我和Sarah之间的Adapter,让我和Sarah可以相互交谈了(也不
知道
他会不会耍我)。 &...
CPU框架~ 什么是X86 ?~什么是ARM ? 华为鲲鹏云是什么?
目录 前提与背景 : 什么是CPU? CPU 主要 的功能: ...什么是X86 ,X86的CPU类型有...偶然机会在某链接看到华为云,有个活动,奖品有机械键盘、手机等。哇,白来的怎么不会
做
, 通过了解是华为要推广鲲鹏云生态...
软件
是如何控制硬件的?
这个时候好多小伙伴也许开始向我扔鸡蛋了,rz一样,没
软件
我的电脑怎么运行的,我昨天还写了
一个
软件
控制LED灯实现了跑马灯效果呢。。。你今天告诉我这个世界上不存在
软件
?脑子有问题吧? 大家先别着急,听我慢慢...
你如何理解
软件
测试?
软件
测试属于
软件
开发过程的
一个
环节,与
软件
工程一起兴起于小型
软件
向大型
软件
开发额过渡期,按照中国人所说的人体是金木水火土的说法,如果用在
软件
工程上,那么测试就是
一个
对结构进行校验的作用。 按照我的...
某俄罗斯小哥,竟靠
一个
服务器
软件
直接封神?
最近在搭建
一个
网站,就不可避免地要用到 Nginx,索性就出一期 Nginx 的入门教程,希望也可以帮助到大家~???? 作为开发者,相信大家都
知道
Nginx 的重要性。Nginx 是
一个
高性能的 HTTP 和反向代理 Web 服务器,由...
Delphi
5,388
社区成员
262,730
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章