急急!急。高手请进。关于socket和消息处理的,谢绝灌水。

hieefxz 2001-05-24 03:15:00
serversocket对于每个clientsocket都要建立一个窗体来管理该连接,对于每个socket消息采用windows的消息处理机制。现在我要改成只用一个窗体来管理所有的clientsocket连接,这就需要有自己的消息处理机制,该如何来建立这个窗体和该窗体的消息处理机制???
...全文
220 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hieefxz 2001-06-01
  • 打赏
  • 举报
回复
copy_paste(木石三):能否保持联系??我的E-mail:hieefxz @163.net oicq:5073699
hieefxz 2001-05-31
  • 打赏
  • 举报
回复
copy_paste(木石三) :是的,是继承自TCustomWinsock,我是将所有的关于阻塞方式的代码剔除了。也就是全都用非阻塞方式。然后我又在非阻塞方式下创建了两个线程,一个用来管理连接的建立(TserversocketclientacceptThread);一个用来管理连接(TManageclientThread)。
第一个没问题。第二个我一直没搞出来。我的实现原理是这样的:
1)创建TManageclientThread
2)在TManageclientThread中建立一个窗口(messagehandle),专门负责所有socket通信消息(不是连接请求消 息)的处理。
3)TManageclientThread有一个消息队列,所有socket消息都存放在这个队列里。
4)通过GetMessage从消息队列里取得消息后,判定是否为socket通信消息,是的话直接送
messagehandle窗口处理。

这样我就不用为每一个client连接建立一个连接管理窗口。从而达到节省系统资源的目的。(因为我的系统要求的client连接有几千个。而且一定要用TServersocket控件来实现。

######最好能给我较详细的源码,不要是几句话的建议。
copy_paste 2001-05-31
  • 打赏
  • 举报
回复

const
WM_MyFirstSocketMessage = WM_User + 1;
WM_MyLastSocketMessage = WM_MyFirstSocketMessage + 1;

type

TManageClientThread = class(TThread)
private
FParentHandle: THandle;
FYourServerSocket: TYourServerSocket;
protected
procedure Execuate; override;
public
constructor Create(AServerSocket: TYourServerSocket);
end;

constructor TMangeClientThread.Create(AServerSocket: TYourServerSocket);
begin
FYourServerSocket := AServerSocket;
FParentHandle := FYourServerSocket.Handle;
inhertied Create(not FYourServerSocket.Connected);
end;

procedure TMangeClientThread.Execuate;
var
Msg: TMsg;
begin
while FYourServerSocket.Connected do
begin
//GetMessage好像取出消息后并不从消息队列中删除,这样会循环访问已访问的消息。
if PeekMessage(Msg, FParentHandle, WM_MyFirstSocketMessage,
WM_MyLastSocketMessage, PM_REMOVE) then
begin
if Msg.hwnd <> FParentHandle then Continue;
case Msg.Message of
WM_MyFirstSocketMessage: // Do your code
WM_MyLastSocketMessage: // Do your code
end;
end else WaitMessage;
end;
end;

在Delphi的TServerSocket中不是你说的为每个客户端建立一个窗体,Block模式则只是根据客户的Socket新增了一个
TServerClientSocket{= class(TCustomWinSocket)},如果是Thread模式中增加一个客户线程,如果有一个客户商连接后,服务端只是增加一个TServerClientSocket对像(线程则是多了一个TServerClientThread对象),并不是窗体。

还有我觉得TServerSocket管理线程和客户端还是不会怎么样,可以不用自己写。
可能你要的ServerSocket不是线程模式的。
hieefxz 2001-05-31
  • 打赏
  • 举报
回复
来个高手吧!!!
airhorse 2001-05-30
  • 打赏
  • 举报
回复
你已经讲的够清楚了,那里有问题吗:
我讲的消息处理是这样的:自己创建一个窗口,这个窗口有一个窗口过程,并为这个窗口建立一个消息队列,所有的socket消息都存放在这个队列里,通过OnMessage事件从队列里读取消息,判断是连接请求消息还是client端发来的data信息再分别进行处理。而不是delphi自身的创建一个窗口用于专门管理连接,再为每个连接创建一个窗体。
copy_paste 2001-05-30
  • 打赏
  • 举报
回复
你写的控件是否继承TCustomWinSocket,如果是,那客户端的消息都会发送到CM_SOCKETMESSAGE
中,看你想做什么。
我怎么看半天,没看清你想做什么。
hieefxz 2001-05-29
  • 打赏
  • 举报
回复
我是用winsock作了一个自己的socket控件,在这个控件里采用了多客户端消息队列模式
airhorse 2001-05-29
  • 打赏
  • 举报
回复

既然你的服务器是一个多客户端消息队列模式,那你为什么还有ServerSoket这种入门级的控件来写你的高效的的服务例程呢?
你应该直接用win sock来写。

hieefxz 2001-05-28
  • 打赏
  • 举报
回复
我加分了,高手快来啊
hieefxz 2001-05-28
  • 打赏
  • 举报
回复
怎么没人来啊,高手呢,
hieefxz 2001-05-25
  • 打赏
  • 举报
回复
YangYun():在非阻塞方式下,是每个连接都有自己的连接管理窗口,这是一个Windowtool窗口,资源从GDI分配,这个窗口的句柄和连接的Socket句柄是一样的。创建线程的是阻塞方式。我要讨论的是非阻塞方式,即stNonBlocking方式。
delphi_bird 2001-05-25
  • 打赏
  • 举报
回复
listen
hieefxz 2001-05-25
  • 打赏
  • 举报
回复
airhorse(编程至尊宝) 分数那好商量,我再追加200够了吧?
airhorse 2001-05-25
  • 打赏
  • 举报
回复
我大致明白了,不过二○分太少了,没力气打字。
dswlei 2001-05-24
  • 打赏
  • 举报
回复
上面的好像说错了吧,stNonBlocking是非阻塞方式
dswlei 2001-05-24
  • 打赏
  • 举报
回复
up
YangYun 2001-05-24
  • 打赏
  • 举报
回复
纠正一下,你的说法有问题,ServerSocket会为每一个连接开一个线程,而不是窗口,如果非要在一个线程中处理所有连接的话,就只有把ServerType特性设为stNonBlocking,即采用阻塞方式连接每一个客户,所有的连接都在一个单独的线程中处理,并且用异步的OnClientWrite和OnClientRead来件来通知服务器端进行读或写
hieefxz 2001-05-24
  • 打赏
  • 举报
回复
yypp:你说的那是连接管理,不是消息处理,我讲的消息处理是这样的:自己创建一个窗口,这个窗口有一个窗口过程,并为这个窗口建立一个消息队列,所有的socket消息都存放在这个队列里,通过OnMessage事件从队列里读取消息,判断是连接请求消息还是client端发来的data信息再分别进行处理。而不是delphi自身的创建一个窗口用于专门管理连接,再为每个连接创建一个窗体。
yypp 2001-05-24
  • 打赏
  • 举报
回复
你里的消息管理机制指的是什么?在 ServerSocket里 ,当有接收到客户端发送过来的消息的时候
触发ServerSocket1ClientRead事件。

ServerSocket1.Socket.Connections[i];可以表示已经建立的TCP/IP连接。
比如ServerSocket已经被两个ClientSocket连接上了的话,那么ServerSocket1.Socket.Connections[0]表示第一个连接,ServerSocket1.Socket.Connections[1]表示第二个连接。

hieefxz 2001-05-24
  • 打赏
  • 举报
回复
急急,高手快来
内容简介   《google android sdk开发范例大全(第3版)》在上一版的基础上,以android手机应用程序开发(采用android sdk 2.3.3)为主题,超过200多个范例全面且深度地整合了手机、网络及服务等多个开发领域,为读者提高程序设计能力提供了很大的帮助。    全书共分11章,主要以范例集的方式来讲述android的知识点,详细介绍了开发android的人机交互界面、android常用的开发控件、android手机收发短信等通信服务、开发android手机的自动服务功能和娱乐多媒体功能以及整合android与google强大的网络服务等内容。随书光盘中包括了所有范例的程序代码。    《google android sdk开发范例大全(第3版)》继承前两版由浅入深的方式,范例总数由原先的160多个增加到了200多个,在用户交互界面、手机控件、交互式通信服务、手机自助服务、娱乐多媒体等方面均增加了相应的范例来介绍新的开发技术,特别是新增加了第11章来专门介绍html5技术在android移动设备里的应用,相信当下两个热门技术的交汇会碰撞出不一样的火花。    《google android sdk开发范例大全(第3版)》内容由android的基础知识到实际开发应用,结构清晰、语言简洁,非常适合android的初学者和android的进阶程序开发者阅读参考。 目录 《google android sdk开发范例大全(第3版)》 第1章 了解、深入、动手做 1 1.1 红透半边天的android 2 1.2 本书目的及范例涵盖范围 3 1.3 如何阅读本书 4 1.4 使用本书范例 5 1.5 参考网站 6 第2章 android初体验 7 2.1 安装android sdk与adt/ddms 8 2.2 创建第一个android项目(hello android!) 11 2.3 android应用程序架构——从此开始 15 2.4 可视化的界面开发工具 18 2.5 部署应用程序到android手机 19 第3章 用户人机界面 22 3.1 更改与显示文字标签 23 3.2 更改手机窗口画面底色 24 3.3 更改textview文字颜色 26 3.4 置换textview文字 28 3.5 取得手机屏幕大小 29 3.6 样式化的定型对象 30 .3.7 简易的按钮事件 32 3.8 手机页面的转换 34 3.9 调用另一个activity 37 3.10 不同activity之间的数据传递 41 3.11 返回数据到前一个activity 44 3.12 具有交互功能的对话框 49 3.13 置换文字颜色的机关 51 3.14 控制不同的文字字体 52 3.15 如iphone拖动相片特效 54 3.16 自制计算器 56 3.17 关于(about)程序信息 58 3.18 程序加载中,请稍候 61 3.19 全屏幕以按钮重写 63 3.20 今晚到哪儿打牙祭 64 3.21 android变脸 67 3.22 打勾显示输入的密码 69 3.23 android多语系支持 71 3.24 判断手机操作系统版本是否允许运行程序 72 3.25 两个不同的程序彼此调用 75 3.26 指定安装应用程序迁移至sd卡 78 3.27 手机动态layout主题随手势物换迁移 79 第4章 史上超豪华的手机控件 84 4.1 edittext与textview共舞 85 4.2 设计具有背景图的按钮 86 4.3 给圣诞老人的信息 88 4.4 我同意条款 90 4.5 消费券采购列表 92 4.6 向左或向右 94 4.7 专业相框设计 96 4.8 自定义下拉菜单模式 99 4.9 动态添加/删除的spinner菜单 102 4.10 心爱小宝贝相片集 104 4.11 快速地搜索手机文件引擎 107 4.12 按钮也能随单击变换 109 4.13 具自动提示功能的菜单 110 4.14 数字及模拟小时钟设计 112 4.15 动态输入日期与时间 114 4.16 猜猜红桃a在哪儿 117 4.17 后台程序运行进度提示 121 4.18 动态文字排版 124 4.19 在activity里显示列表 128 4.20 以动态列表配置选项 130 4.21 查找程序根目录下所有文件 134 4.22 加载手机磁盘里的图片文件 137 4.23 动态放大缩小imageview里的图片 139 4.24 动态旋转图片 142 4.25 猜猜我在想什么 145 4

5,388

社区成员

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

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