我试图为minecraft服务器制作客户机/机器人,以自动保护聊天和禁止垃圾邮件发送者。(第一个成就)
我在这里找到了一些文档,并从这里实现了数据类型(所以它们看起来像这样--我还没有完成)。现在,我正在尝试发送inital0x02
数据包,应该如下所示:
size value comment
1 0x02 Packet ID
2+? string Username (I send "jakub")
2+? another string Server host name - here, the program FAILS*
4 25565 Port number
*fails表示bukkit服务器在控制台中输出以下内容,套接字关闭:
11:09:45[信息]/127.0.0.1:51256失去连接
我现在可以看到如何测试我的数据类型是否正确,但因为我似乎发送用户名没有问题,我认为我发送了错误的信息,尽管格式是正确的。
但不管怎样,我很好奇我是否做得对。我有mc_short
和mc_string
的类。以下是mc_short
如何创建2个字节:
//mc_short::val is type of short
void mc_short::asBytes(char* data) {
for (int i = 0; i < 2; i++)
data[endianity?i:1-i] = (val >> (i * 8)); //Some magic with byteshifting.
//endianity is set to false, because java uses BigEndian everywhere** (UNFRIENDLY PERSONS!!)
}
**参见http://wiki.vg/data_types:
Java中的所有类型(以及Minecraft)都是big-endian,也就是说,最重要的字节排在第一位。
然后字符串本身使用mc_short
和std::string
填充char*
中的字节。
void mc_string::asBytes(char* data) {
mc_short size((short)val.length()); //val is std::string
size.endianity = endianity; //mc_string::endianity is boolean, and is ony used to determine endianity of the first 2 bytes
size.asBytes(data); //Filling 2 bytes in data - length info
for(short i=0; i<size.value(); i++) {
data[i+2] = val[i]; //Copying std::string to data
}
}
我知道,我的问题是关于不太为人所知的话题,因此你可能不知道答案,也不知道话题本身。在这种情况下忽略这个问题就行了。
因此,如果您做了第一个,您将需要用Java编写一个插件。我对此了解不多。
如果你还想完全滚自己的,祝你好运。
我一直在开发一个java程序,基本上类似于Minechat(基于文本的应用程序,用于查看聊天。)我从来没有在网络方面做过太多工作,所以问题是如何正确发送数据包。我目前正在创建与服务器的握手。经过几个小时的研究,我终于想出了以下代码,但它总是会出现“失败!(异常)”的消息。对我来说,一切看起来都是正确的,但据我所知,它可能是100%错误的。如果有人能指出我做错了什么,我会非常感激。 作为参考,请随意
问题内容: 我一直在研究一个Java程序,该程序基本上类似于Minechat(基于文本的应用程序,仅用于查看聊天。)我从来没有真正与网络打交道,因此,问题在于弄清楚如何正确发送数据包。我目前处于与服务器创建握手的位置。经过数小时的研究,我提出了以下代码,但始终会遇到“ Failed!(Exception)”消息。对我来说,一切看起来都是正确的,但就我所知,这可能是100%错误的。如果有人可以指出我
我使用vert. x java客户端连接安慰服务器。当使用SSL证书进行连接时,收到以下SSL握手错误。我在代码中使用setTrust all(true)。有人能帮助解释错误的原因和解决方案吗? 以下是错误:SEVERE:未处理的异常java.lang.IllegalStateExctive:桥没有成功启动io.vertx.amqpbridge.impl.AmqpBridgeImpl.create
概述 客户端代码 概述 建立连接 open事件 message事件 error事件 自定义事件 close方法 数据格式 概述 data:数据栏 id:数据标识符 event栏:自定义信息类型 retry:最大间隔时间 服务器代码 参考链接 概述 传统的网页都是浏览器向服务器“查询”数据,但是很多场合,最有效的方式是服务器向浏览器“发送”数据。比如,每当收到新的电子邮件,服务器就向浏览器发送一个“
概述 客户端代码 概述 建立连接 open事件 message事件 error事件 自定义事件 close方法 数据格式 概述 data:数据栏 id:数据标识符 event栏:自定义信息类型 retry:最大间隔时间 服务器代码 参考链接 概述 传统的网页都是浏览器向服务器“查询”数据,但是很多场合,最有效的方式是服务器向浏览器“发送”数据。比如,每当收到新的电子邮件,服务器就向浏览器发送一个“
如果我正确理解了服务器发送事件的原则,那么每次客户端注册到EventSource时,它实际上会打开一个到管理事件的资源的新HTTP连接。与其他HTTP请求相反,连接保持活动状态,因此专用于此客户端的服务器进程/线程将一直运行,直到客户端断开连接。 如果我们有1000个客户端使用SSE连接到一个应用程序,该怎么办?我们是否会有1000个进程/线程(做同样的事情)并发运行以处理SSE?我想我错了,但如