Project1

标题: RM的SOCKET [打印本页]

作者: 神思    时间: 2011-8-8 00:01
标题: RM的SOCKET
本帖最后由 神思 于 2011-8-8 00:13 编辑

用动态链接库实现的SOCKET。
有了这个,你就可以尽情的访问网络了。{:nm_4:}
目前只有客户端。。不会有谁去用RM做服务端的吧。。{:nm_7:}
当然,其实服务端也是能做的,改天再完善吧。今天先到这。
异步Recv,他会发送消息过来提示有数据到的。所以速度不会太慢。

下面是RM跟一个聊天室的效果图,已经能收到消息了{:nm_4:}




SocketForRM.rar (737.79 KB, 下载次数: 922)

{:nm_6:} 文件发上来了。
作者: 匿名    时间: 2011-8-8 00:49
网络技术总是这么的光辉啊
作者: 神思    时间: 2011-8-8 00:54
{:nm_7:}小蛇子你总是那么的神出鬼没啊.
作者: 匿名    时间: 2011-8-8 06:23
本帖最后由 匿名 于 2011-8-8 06:35 编辑

偶猜2楼是小柯~\(≧▽≦)/~
网络神马的,偶在用RAKNET
↓捏熊猫
作者: IamI    时间: 2011-8-8 06:30
让2K失望下。马克留名
作者: 510035021    时间: 2011-8-8 06:51
你这是做完的没啊,一进去黑屏,关不掉,还要结束进程
作者: 素材发布    时间: 2011-8-8 06:53
不错滴素材 与网络有关永远是对滴~
作者: BS包仔    时间: 2011-8-8 08:01
如果游戏火了一定要这个,太牛了!
作者: px.凤翔九天    时间: 2011-8-8 08:45
SO...SOCKET?!这货的范例教程神马的找了好久啊..........虽然估计暂时用不到不过果断下载学习~感谢
作者: 小⑨    时间: 2011-8-8 10:59
其实很想知道AS那端的东西……
作者: 神思    时间: 2011-8-8 11:30
AS那端也只是个客户端,,,服务端还有另外一个东西。。。。。。。。。。。。。。。
作者: 柳之一    时间: 2011-8-8 13:20
上当了,万里长征,才走完第一步啊:dizzy:
作者: 退屈£无聊    时间: 2011-8-8 13:24
~果然这年头网络什么的才是王道。
作者: 神思    时间: 2011-8-8 13:24
柳之一 发表于 2011-8-8 13:20
上当了,万里长征,才走完第一步啊

等完善后可以考虑做个基于RM的网络通讯框架什么的.
作者: 柳之一    时间: 2011-8-8 13:34
我觉得只要winapi调用可以和服务器接收发送就够了,但是经常会 漏接
而且不同步。很头痛
作者: 神思    时间: 2011-8-8 13:48
本帖最后由 神思 于 2011-8-8 13:51 编辑

关于丢包我也试过.偶尔性.在链接库里就出问题了,但是几率很小.这就不是RM可以处理的了.也没办法
现在是在DLL里维护一个消息队列,一旦select到数据,就将消息加入队列,然后Post一条消息给RM的窗口。
然后RM就去队列取消息。所以基本不会出现不同步这种情况


总觉得  这个+Marshal 可以干很多事!!
作者: 匿名    时间: 2011-8-8 14:39
RAKNET不丢包呀不丢包~\(≧▽≦)/~
作者: 神思    时间: 2011-8-8 15:01
或许可以再套一个RAKNET...
让RM网络平民化吧!!!!!
作者: 匿名    时间: 2011-8-8 15:07
本帖最后由 匿名 于 2011-8-8 15:07 编辑


其实联网只是第一步而已,后面有更多的茶几,不清理干净上面的杯具的话平民根本无法使用(当然这也不错)~\(≧▽≦)/~
作者: 独孤残云    时间: 2011-8-8 15:07
本帖最后由 独孤残云 于 2011-8-8 16:03 编辑

Select模型?
可以用效率比较高的IOCP吗?
作者: 柳之一    时间: 2011-8-8 15:41
不需要平民化,我能用就行了
作者: yangff    时间: 2011-8-8 17:24
纯MARK= =不过已经打算用HTTP来做了
作者: 八云紫    时间: 2011-8-8 17:50
网络其实还有很多需要考虑的。 用户资料放哪里, 关于部分计算放哪里,关于异常处理,关于丢包、粘包啥的。 然后还有通信规格。

嘛, 支持还是需要的。{:nm_4:}
作者: ycwbossdear    时间: 2011-8-8 19:16
谢谢了!
作者: 雷欧纳德    时间: 2011-8-8 22:24
我是来围观lz的,话说不是发错区了吗?
作者: 神思    时间: 2011-8-9 03:30
本帖最后由 神思 于 2011-8-9 03:30 编辑

今天看了一下RAKNET。。
封装一层后在RM里用。说不定会很赞。
明天开始做吧!!,啊,不对,应该是今天。。。。。
作者: 匿名    时间: 2011-8-9 07:12
偶已经在石器里用了1年多了 囧
作者: 神思    时间: 2011-8-9 09:19
今天早上已经测试封装了一些东西.
并且连接成功了,咱们做一个RM专用的网络框架吧.!!!!

等再完善点就找人合作一起干.
作者: 匿名    时间: 2011-8-9 09:22
本帖最后由 匿名 于 2011-8-9 09:23 编辑

果断入伙~\(≧▽≦)/~
旧坑再起
作者: 灵魂の补给    时间: 2011-8-9 10:59
- - 这个不是早就有了??
作者: 熊猫    时间: 2011-8-9 22:17
成了!VB.NET<=>RM

SOC.jpg (54.27 KB, 下载次数: 34)

SOC.jpg

作者: 神思    时间: 2011-8-10 10:14
哈哈,能用就行,,
昨天没干活,,今晚继续RakNet To RM
作者: 晴.    时间: 2011-8-10 10:25
这个不是很早很早就有了吗~~~
作者: 匿名    时间: 2011-8-10 10:27
于是很顺利地诱拐了思思去玩RAKNET~\(≧▽≦)/~
作者: 神思    时间: 2011-8-10 10:46
晴. 发表于 2011-8-10 10:25
这个不是很早很早就有了吗~~~

嗯,我看过已个直接用ws2_32.dll 这玩意的。。。没怎么看,貌似是一直select拿的数据?
我这个有点不同的:)
作者: 匿名    时间: 2011-8-10 11:18
本帖最后由 匿名 于 2011-8-10 11:29 编辑

  1. #include <windows.h>
  2. #include <string.h>

  3. #include "RakPeerInterface.h"
  4. #include "RakNetworkFactory.h"
  5. #include "MessageIdentifiers.h"

  6. #include <fstream>

  7. using namespace std;

  8. SocketDescriptor g_sdp(5417,0);
  9. SocketDescriptor g_sdp2(5418,0);
  10. RakPeerInterface *rakPeer1;
  11. RakPeerInterface *rakPeer2;

  12. struct SATalkingMessage
  13. {
  14.         unsigned char messageID;
  15.         //char* str;
  16.         char str[512];
  17. };



  18. ///////////////////////////////////////////////////////////////////////////////////////////


  19. int   InitialServer()
  20. {
  21.         rakPeer1 = RakNetworkFactory::GetRakPeerInterface();
  22.         rakPeer1->Startup(8,30,&g_sdp,1);
  23.         rakPeer1->SetMaximumIncomingConnections(8);
  24.         return 1;
  25. }




  26. void    ServerGetPacket(char  iner[])
  27. {
  28.    Packet *packet = rakPeer1->Receive();
  29.    if(packet)
  30.    {
  31.            if(packet->data[0] == ID_USER_PACKET_ENUM)
  32.            {
  33.                    sprintf(iner,"%s::%s",packet->systemAddress.ToString(),packet->data+1);
  34.            }
  35.            else if(packet->data[0] == ID_NEW_INCOMING_CONNECTION)
  36.            {
  37.                         //Welcome~~~~~~~~
  38.                         sprintf(iner,"%s::RN_newing",packet->systemAddress.ToString());
  39.            }
  40.            else if(packet->data[0] == ID_CONNECTION_LOST || packet->data[0] == ID_DISCONNECTION_NOTIFICATION)
  41.            {
  42.                         sprintf(iner,"%s::RN_disconnect",packet->systemAddress.ToString());
  43.            }
  44.            rakPeer1->DeallocatePacket(packet);
  45.    }
  46.    return;
  47. }

  48. int  ServerSend(char* messagetest,int type)
  49. {
  50.         SATalkingMessage message;
  51.         message.messageID = ID_USER_PACKET_ENUM;
  52.         strcpy(message.str,messagetest);
  53.     rakPeer1->Send((char*)&message,sizeof(message),HIGH_PRIORITY,(PacketReliability)type,0,UNASSIGNED_SYSTEM_ADDRESS,true);
  54.         return 1;
  55. }

  56. void  CloseServer()
  57. {
  58.    RakNetworkFactory::DestroyRakPeerInterface(rakPeer1);
  59. }


  60. int ServerConnectionCount(void)
  61. {
  62.         int i,count;
  63.         for (i=0,count=0; i < 8;i++)
  64.         {
  65.                 if (rakPeer1->GetSystemAddressFromIndex(i) != UNASSIGNED_SYSTEM_ADDRESS)
  66.                 {
  67.                         count++;
  68.                 }
  69.         }
  70.         return count;
  71. }
  72. ///////////////////////////////////////////////////////////////////////////////////////////
  73. int InitialClient()
  74. {
  75.         rakPeer2 = RakNetworkFactory::GetRakPeerInterface();
  76.         rakPeer2->Startup(8,30,&g_sdp2,1);
  77.         return 1;
  78. }

  79. int  ClientConnect(char* host)
  80. {
  81.         rakPeer2->Connect(host,5417,0,0,0);
  82.         while(1)
  83.         {
  84.       Packet *packet = rakPeer2->Receive();
  85.           if(packet)
  86.           {
  87.                 if(packet->data[0] == ID_CONNECTION_REQUEST_ACCEPTED)
  88.                 {
  89.                         //We connect target yada!
  90.                         rakPeer2->DeallocatePacket(packet);
  91.                         return 1;
  92.                 }
  93.                 else if(packet->data[0] == ID_CONNECTION_ATTEMPT_FAILED)
  94.                 {
  95.                         //We failed to connect...
  96.                         rakPeer2->DeallocatePacket(packet);
  97.                         return 0;
  98.                 }
  99.                 else if(packet->data[0] == ID_ALREADY_CONNECTED)
  100.                 {
  101.                         // We already connected!!!
  102.                         rakPeer2->DeallocatePacket(packet);
  103.                         return 2;
  104.                 }
  105.                 else if(packet->data[0] == ID_NO_FREE_INCOMING_CONNECTIONS)
  106.                 {
  107.                         // the server is full!
  108.                         rakPeer2->DeallocatePacket(packet);
  109.                         return 4;
  110.                 }
  111.                 rakPeer2->DeallocatePacket(packet);
  112.           }
  113.         }
  114.         return 0;
  115. }

  116.   int  ClientSend(char* messagetest,int type)
  117. {
  118.         SATalkingMessage message;
  119.         message.messageID = ID_USER_PACKET_ENUM;
  120.         strcpy(message.str,messagetest);
  121.         rakPeer2->Send((char*)&message,sizeof(message),HIGH_PRIORITY,(PacketReliability)type,0,UNASSIGNED_SYSTEM_ADDRESS,true);
  122.         return 1;
  123. }

  124. void SearchforServer()
  125. {
  126.           rakPeer2->Ping("255.255.255.255",5417,true);
  127. }

  128. void    ClientGetPacket(char  iner[])
  129.   {
  130.           Packet *packet = rakPeer2->Receive();
  131.           if(packet)
  132.           {
  133.                   if(packet->data[0] == ID_USER_PACKET_ENUM)
  134.                   {
  135.                           sprintf(iner,"%s::%s",packet->systemAddress.ToString(),packet->data+1);
  136.                   }
  137.                   else if(packet->data[0] == ID_CONNECTION_LOST || packet->data[0] == ID_DISCONNECTION_NOTIFICATION)
  138.                   {
  139.                           sprintf(iner,"%s::RN_disconnect",packet->systemAddress.ToString());
  140.                   }
  141.                   else if(packet->data[0] == ID_PONG)
  142.                   {
  143.                           sprintf(iner,"%s::RN_PONG",packet->systemAddress.ToString());
  144.                   }
  145.                   rakPeer2->DeallocatePacket(packet);
  146.           }
  147.           return;
  148.   }

  149. int  ClientDisConnect()
  150. {
  151.         rakPeer2->CloseConnection(rakPeer2->GetSystemAddressFromIndex(0),true,0);
  152.         return 1;
  153. }

  154. int  CloseClient()
  155. {
  156.          RakNetworkFactory::DestroyRakPeerInterface(rakPeer2);
  157.          return 1;
  158. }

  159. ///////////////////////////////////////////////////////////////////////////////////////////
  160. void DonotGCme()
  161. {
  162. }

  163. void ClientGetMyIP(char  iner[])
  164. {
  165.         sprintf(iner,"%s",rakPeer2->GetLocalIP(0));
  166. }
  167. void SeverGetMyIP(char iner[])
  168. {
  169.         sprintf(iner,"%s",rakPeer1->GetLocalIP(0));
  170. }

  171. ///////////////////////////////////////////////////////////////////////////////////////////

  172. BOOL APIENTRY DllMain( HANDLE hModule,
  173.                                           DWORD  ul_reason_for_call,
  174.                                           LPVOID lpReserved
  175.                                           )
  176. {
  177.         return TRUE;
  178. }
复制代码
于是偶果断把去年寒假的蛋痛物挖出来了。

RM的部分在
http://www.diyrpg.net/forum.php? ... st%3D1%26digest%3D1

后来更新过一次补上了自动搜索局域网主机神马的。
没把战斗同步和某些安全问题填完就去轰杀GRE和托福了,于是那些一直坑着 囧

那个……那个……明明那个时候思思就在那个帖子里的啊 囧
作者: chaochao    时间: 2011-8-10 11:33
能写SOCKET了,谁还用RM啊……
作者: 匿名    时间: 2011-8-10 11:34
CHAOCHAO诈尸了啊
作者: 精灵使者    时间: 2011-8-10 11:39
精灵想把这个发配到技术区。
作者: 神思    时间: 2011-8-10 11:51
我想让人能在RM里使用原生RakNet,
只封装浅浅的一层就够了。
作者: 灼眼的夏娜    时间: 2011-8-10 12:24
路过看看思思(((::~~

作者: 匿名    时间: 2011-8-10 14:13
本帖最后由 匿名 于 2011-8-10 14:14 编辑
灼眼的夏娜 发表于 2011-8-10 12:24
路过看看思思(((::~~


RMXP&RMVX通用Web化完成是神马
作者: zjaycool    时间: 2011-8-10 18:24
我已经用RM作出 RM-ONLINE 了。。。呵呵、、、QQ156419499
作者: 神思    时间: 2011-8-10 19:49
本帖最后由 神思 于 2011-8-10 19:49 编辑
匿名者 发表于 2011-8-10 14:13
RMXP&RMVX通用Web化完成是神马


求小蛇子企鹅号。。。


另外。,谢谢LS,不过我并不是打算做游戏.
是打算写一个框架:)

作者: 匿名    时间: 2011-8-10 20:30
181669887,万年隐身打酱油状态~\(≧▽≦)/~




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1