社区
网络编程
帖子详情
超级郁闷,为什么socket封装到windows服务就不能正常运行了?
antshome
2005-07-31 10:45:19
问题如下:
我在一个对话框程序里调试好了socket的服务端
后来想把程序封装成windows服务,代码是移值过去的
但是不能用
m_pSocket->Create()
m_pSocket->Listen()
都是成功的,
但是接收不到客户端的连接请求(OnAccept)
难道windows服务(win32控制台项目)和普通的MFC程序里,socket用法有什么不一样吗?
...全文
370
15
打赏
收藏
超级郁闷,为什么socket封装到windows服务就不能正常运行了?
问题如下: 我在一个对话框程序里调试好了socket的服务端 后来想把程序封装成windows服务,代码是移值过去的 但是不能用 m_pSocket->Create() m_pSocket->Listen() 都是成功的, 但是接收不到客户端的连接请求(OnAccept) 难道windows服务(win32控制台项目)和普通的MFC程序里,socket用法有什么不一样吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
antshome
2005-08-01
打赏
举报
回复
或者告诉我,除了SetTimer这种方法以外,如何定时执行某个操作
antshome
2005-08-01
打赏
举报
回复
to fzd999(花差花差)
看来还只能用API来做了
另外,还要请教一下,为什么服务里不能用SetTimer启动定时器?
darkstar21cn
2005-08-01
打赏
举报
回复
服务程序最好不要使用SetTimer,应该使用一个进程来监听端口。
fzd999
2005-08-01
打赏
举报
回复
antshome(忧郁的苦瓜),我做过类似的事情,由于有太多权限方面的问题没有成功,后来用Socket API,直接事件异步模式解决了问题,开发加单体测试花费时间是两个工作日,建议你不要犹豫不决了,在Service里面弃用MFC中的CSocket,采用Socket API,并不困难的。
antshome
2005-08-01
打赏
举报
回复
TO orbit(走了走了)
我加了调试信息,写到windows日志查看器里,看到的都是正常的
TO fzd999(花差花差)
是你说的意思
本来是没有对话框的,直接是类里封装好的,不行后,我才加了个对话框
另外还有个问题
::SetTimer好像也不能在服务里运行
fzd999
2005-08-01
打赏
举报
回复
antshome(忧郁的苦瓜),我了解你的情况了,你在服务中指定了桌面交互,然后显示了一个对话框,然后对话框上有一个按钮,你想按了它就能创建Socket,是吧?
这里存在一个问题,一是你的对话框是怎么创建的,是直接在Service里面使用MFC类库,还是CreateProcess。假如你是直接使用MFC,那么想在Service中创建套接字是需要重新设置权限的,具体手法比较复杂。假如是CreateProcess,应该可以,可能是你程序哪儿写错了。
原则上还是建议你采用Socket API,一方面MFC封装的并不好,另一方面用Socket API也不容易出错。
吹泡泡的小猫
2005-08-01
打赏
举报
回复
在服务中使用MFC是可以的,你是如何确定
m_pSocket->Create()
m_pSocket->Listen()
是调用成功的
antshome
2005-08-01
打赏
举报
回复
可是我是从CDialog继承的对话框
antshome
2005-08-01
打赏
举报
回复
我改用API写了,已经搞定,谢谢各位
softrain
2005-08-01
打赏
举报
回复
“对话框窗体是可以显示出来的,按钮也能响应事件”和MFC是不相关的两件事,用纯win32API也是可以创建窗口应用程序的,而且运行效率比MFC高。
你可以在控制台程序中调用MessageBox,也会弹出窗口。
DentistryDoctor
2005-08-01
打赏
举报
回复
我想,CSocket内部主要用到了消息机制的原因吧。
可以考虑用API,或是自己封装一个类。
Caps77
2005-08-01
打赏
举报
回复
DLL ,多线程,服务,三种情况下使用SOCKET API一般不容易出错,MFC在这三种情况下一直都存在着一些悬而未决的BUG。
antshome
2005-07-31
打赏
举报
回复
对话框窗体是可以显示出来的,按钮也能响应事件
说明Service里是可以用MFC的类库吧
antshome
2005-07-31
打赏
举报
回复
我的程序是Service启动时,有一个对话框弹出来,有两个按钮,单击后启用socket,这样也不行的?
一定要用API来写?
fzd999
2005-07-31
打赏
举报
回复
默认情况下,Service是控制台程序,不能使用MFC类库,因此你不能在服务中使用CSocket类。解决的办法有两个,一是直接使用WinSocket2 API,二是用Service来CreateProcess一个进程,然后在这个进程里面使用CSocket。
建议直接使用WinSocket API,因为MFC封装做的并不好,而且通讯模式也仅限于阻塞和消息异步,其中消息异步一定要和一个窗口绑定,这在Service里面几乎是个无理的要求。至于如何使用Socket API,你可以参考《Windows网络编程》一书。
怀旧迎新
怀旧迎新 2010年过去了,严格的说,我的计算机生涯度过了1年半了,由一个什么都不知道的
超级
大菜鸟变成了小菜鸟了。 作为启蒙的1年,其重要性是不言而喻,那到底我学到了什么呢? ……...
Linux运维(十)-2016-12-9整理
也有段时间没有整理面试题目了,这几天呢,完成了2场实习生和1场校招,十分
郁闷
,为什么金融运维一点都不关注技术,在乎我的学校成绩,我尼玛想说,学校那么水的课程能说明什么,跟技术有一丁丁点关系吗?...
linux test1
初级:
Windows
:
Windows
上
运行
IIS(asp、asp.net、php)由于部分站点经常挂马,请问如何让该类事情有效发生率降低或避免 CPU占有率忽高忽低,导致系统报警,初步判断是某个IIS网站程序编写...
超级
收藏夹
类的序列化到XML与XML反序列化到类 [问题]DotNet 项目如何实现在构建时 Build 号自动增加? DataGrid数据绑定CheckBox 设计模式(16)-Bridge Pattern 设计模式(17)...
计算机必要知识
net命令介绍这篇文章综合了
WINDOWS
98,
WINDOWS
WORKSTATION和
WINDOWS
SERVER 三个操作系 统关于NET命令的解释,希望可以全面一些 先说一些: (1)NET命令是一个命令行命令。 (2)管理网络环境、
服务
、用户、登陆。。...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章