游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2543|回复: 7

如果在D3D的框架程序中想实现联网应该怎么做?

[复制链接]

16

主题

43

帖子

43

积分

注册会员

Rank: 2

积分
43
发表于 2010-1-2 14:34:00 | 显示全部楼层 |阅读模式
我使用了微软的D3D开发包的emptyproject建立了框架程序,想加进联网的功能,却发现不允许添加CSocket类,说什么mfc类只能加到mfc项目中,意思是说这不是mfc项目?那我该怎么办才能加上联网的功能?
我会用mfc写聊天室。如果是CSocket类我就明白。

12

主题

378

帖子

466

积分

中级会员

Rank: 3Rank: 3

积分
466
发表于 2010-1-2 17:52:00 | 显示全部楼层

Re:如果在D3D的框架程序中想实现联网应该怎么做?

除了客户端要做这些工作外,还需要服务器端的大量编程才能配合,多找找点什么资料看吧,很不容易.

71

主题

1330

帖子

2585

积分

金牌会员

Rank: 6Rank: 6

积分
2585
发表于 2010-1-2 20:21:00 | 显示全部楼层

Re:如果在D3D的框架程序中想实现联网应该怎么做?

没有CSocket,你可以用原生的socket的api啊。

16

主题

43

帖子

43

积分

注册会员

Rank: 2

积分
43
 楼主| 发表于 2010-1-3 10:17:00 | 显示全部楼层

Re: Re:如果在D3D的框架程序中想实现联网应该怎么做?

yahle: Re:如果在D3D的框架程序中想实现联网应该怎么做?

没有CSocket,你可以用原生的socket的api啊。

谢谢你,我现在就是用原生的socket的api,可是还有问题,我向服务器端发送消息,接收成功,但服务器发来的消息,我接收的函数这里无法照搬原例,原例中有一句WSAAsyncSelect(m_client,m_hWnd,1000,FD_READ);其中的m_hWnd无定义,那么应该用什么来做本窗口的句柄呢?还有就是刚才这句好像是想在本窗口收到网络消息时转而执行接收函数:
:reTranslateMessage(MSG* pMsg){if(pMsg->message==1000)recv(......);}可是在D3D框架中用什么函数能代替PreTranslateMessage呢?我知道这里想用一个消息解释函数?D3D框架中用什么代替呢?谢谢!

12

主题

378

帖子

466

积分

中级会员

Rank: 3Rank: 3

积分
466
发表于 2010-1-3 16:32:00 | 显示全部楼层

Re:如果在D3D的框架程序中想实现联网应该怎么做?

在DX里用Directplay及组件轻松搞定.

16

主题

43

帖子

43

积分

注册会员

Rank: 2

积分
43
 楼主| 发表于 2010-1-4 13:28:00 | 显示全部楼层

Re: 如果在D3D的框架程序中想实现联网应该怎么做?

我按照某书的socket api中抄了一些,服务器端没问题了,主要是客户端有问题:
SOCKET s;WSAAsyncSelect(s,0,1000,FD_READ);是定义了一个消息值为1000的消息,当有网络信息传入窗口时会触发这个消息,但这个消息所对应的触发方式怎么写?我在LRESULT CALLBACK MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool* pbNoFurtherProcessing, void* pUserContext )函数中写这些代码了:if(uMsg==1000)recv(...);,但没反应。而将这代码改成recv(...);就直接收到了服务器连接成功时发来的第一条消息,但之后进入接收死循环,就是阻塞状态。能不能只在服务器发来信息时才接收呢?
请高手提点一下吧。谢谢!

12

主题

378

帖子

466

积分

中级会员

Rank: 3Rank: 3

积分
466
发表于 2010-1-4 16:27:00 | 显示全部楼层

Re:如果在D3D的框架程序中想实现联网应该怎么做?

就改用不阻塞的就得了贝,哪会这么麻烦.

16

主题

43

帖子

43

积分

注册会员

Rank: 2

积分
43
 楼主| 发表于 2010-1-4 16:28:00 | 显示全部楼层

Re: Re: 如果在D3D的框架程序中想实现联网应该怎么做?

是窗口句柄问题,我明白了,WSAAsyncSelect(s,0,1000,FD_READ);中的0是不对的,应该换成DXUTGetHWND(),即,改成WSAAsyncSelect(s,DXUTGetHWND(),1000,FD_READ);通过,成功,谢谢大家!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-16 14:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表