首页 > 解决方案 > 使用 Java 从 Sb0t 聊天服务器正确读取套接字数据包

问题描述

我的问题是关于 Java 的。我正在尝试从聊天服务器接收一个名为 MSG_CHAT_SERVER_PUBLIC 的包。这个包包含用户的名字和他发送的消息。该协议在此协议列表中:http ://uruguayos-xtremos2011.blogspot.com/p/ares-protocol-aresnuevo.html?m= 1 在 Public 方法中,您可以看到服务器如何形成包:https: //github.com/AresChat/sb0t/blob/128b2755cdfedaf498d66fbcdf9fda010f4d3087/core/TCPOutbound.cs

在 Service 方法中,您可以看到聊天客户端如何接收数据包:https ://github.com/AresChat/cb0t/blob/master/cb0t/RoomPanel/AresSocket.cs 在 Eval_Public 方法中您可以看到包是如何读取的在聊天客户端:https ://github.com/AresChat/cb0t/blob/master/cb0t/RoomPanel/Room.Handler.cs

我有以下代码(但 EditText 中没有出现读取包;我希望相反):

InputStream in = sock.getInputStream();

                        while (sock.isConnected()) {

                            //  get message length, first 2 bytes
                            byte[] lengthBytes = new byte[2];
                            in.read(lengthBytes);
                            // convert to int
                            int messageLength = lengthBytes[0] << 8 | lengthBytes[1];


                            // get the protocol byte
                            int procotol = in.read();

                            // get message, length bytes
                            byte[] messageBytes = new byte[messageLength];
                            s.chat.append(Integer.toString(in.read(messageBytes)));


                            // separate message, first x bytes are username
                            int length = 0;

                            // get username length
                            for (byte messageByte : messageBytes) {
                                if (messageByte == 0) break;
                                length++;
                            }

                            // extract username
                            byte[] username = new byte[length];
                            System.arraycopy(messageBytes, 0, username, 0, length);

                            int pos = length + 1;

                            // message length
                            length = messageBytes.length - pos;


                            // extract message
                            byte[] message = new byte[length];
                            System.arraycopy(messageBytes, pos, message, 0, length);

                            s.chat.append("message length: " + messageLength + "\nprocotol: " + procotol + "\nusername: " + new String(username) + "\nmessage: " + new String(message));


                        }

如果我告诉你我到目前为止所做的事情,也许对你来说会更容易:https ://1drv.ms/u/s!An2GIBqaxDQCgTZ_PCnapHpoRjny

在此先感谢您的帮助

标签: javaandroidsocketsclient-server

解决方案


推荐阅读