问题标题: 关于多人Socket联机的讨论

0
0
已解决
王牌工作室官方
王牌工作室官方
新手光能
新手光能

@薛乘志 

 多人游戏中,玩家上线,下线,掉线(崩溃)很难判断

特别是**掉线(崩溃)最棘手

为此,我采用了一种十分严格的办法:

struct SocketData
{
    string state;
    Data data;
};

data是实际发送的数据,但Socket交互中是用二进制文件发送SocketData

其中state可能为"Success1","Success2","Error1","Error2"

前面的字符串是状态,后面的数字是交互次数

第一次:"Success1"

第二次:"Success2"

第三次出错了:"Error3"

......

这样,只要有一方出了问题,state肯定不是想要的东西

就知道出了问题

(可以参考Scratch共创世界的MMO拓展,我要在C++里重现)

我准备做的API有这些函数

1.创建端口为%s的房间
2.加入端口为%s_**IP为%s的房间
3.以IP为%s的玩家为数据源创建线程%p      //%p为pthread的函数指针
4.获取本线程的玩家的返回数据保存到%p     //%p为SocketData的指针
5.数据源%p的玩家异常                  //%p为SocketData的指针,返回布尔值,调用之后数据的state会被置空

暂时就这么多

预计8月中旬**完成

到时候,调用DLL里的RunFunc()并输入函数名字符串和参数

王牌工作室官方在2022-07-22 20:50:13追加了内容

* *=服  务  器

RunFunc只认**,不认* *

王牌工作室官方在2022-07-22 20:51:47追加了内容

RunFunc只认服  务  器,不认* *

P  S  :  这  屏  蔽  词  太  烦  了


0
已采纳
薛乘志
薛乘志
初级启示者
初级启示者

recv()/send()返回值为0或负数即为断连或退出,无需这么折腾

而且你这个二进制传输也有问题,string内并不直接含有字符串内容,而是存储着指向字符串的指针。这样传输会导致string访问出错,应使用char数组(不是指针!!!)或int型

0
被禁言 高乐彤
高乐彤
修练者
修练者

内网穿透我在行!!!!!!!

我从去年10月就开始学习(minecraft联机)内网穿透了

有什么需要找我

我的内网穿透带宽高达30Mbps

我要回答