首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串长度Winsock + UTF8 + "ç“

字符串长度Winsock + UTF8 + "ç“
EN

Stack Overflow用户
提问于 2015-02-06 19:27:28
回答 1查看 157关注 0票数 1

实际上,我对服务器中的“接收数据”有问题。

所有操作都很好,以下是服务器对接收到的数据所做的操作:

代码语言:javascript
复制
    string data = null;
    byte[] buffer = new byte[40000];
    client.TCPClient.GetStream().Read(buffer, 0, 40000);
    data = Encoding.UTF8.GetString(buffer);
    Server.Network.ReceiveData.SelectPacket(client.Index, data);

无效:

代码语言:javascript
复制
public static void SelectPacket(int Index, string data)
{
    string[] packets = data.Split('\\');
    for (int i = 0; i < packets.Length; i++)
    {
        if (packets[i] == String.Empty) { break; }
        if (packets[i].StartsWith("<0>")) { ReceivedAuth(Index); }
        else if (packets[i].StartsWith("<1>")) { ReceivedDisconnect(Index); }
        else if (packets[i].StartsWith("<3>")) { ReceivedMotd(Index); }
        else if (packets[i].StartsWith("<4>")) { ReceivedLogin(Index, packets[i]); }
        else if (packets[i].StartsWith("<5>")) { ReceivedRegister(Index, packets[i]); }
        else if (packets[i].StartsWith("<6>")) { ReceivedNewChar(Index, packets[i]); }
        else if (packets[i].StartsWith("<7>")) { ReceivedLoadChar(Index, packets[i]); }
        else if (packets[i].StartsWith("<8>")) { ReceivedIngame(Index, packets[i]); }
        else if (packets[i].StartsWith("<10>")) { ReceivedUpdatePlayer(Index); }
        else if (packets[i].StartsWith("<11>")) { ReceivedMove(Index, packets[i]); }
        else if (packets[i].StartsWith("<12>")) { ReceivedMessage(Index, packets[i]); }
        else if (packets[i].StartsWith("<13>")) { ReceivedInvSlots(Index, packets[i]); }
        else if (packets[i].StartsWith("<14>")) { LatencyCheck(Index); }
        else if (packets[i].StartsWith("<15>")) { MapCheck(Index, packets[i]); }
        else if (packets[i].StartsWith("<16>")) { UseItemCheck(Index, packets[i]); }
        else if (packets[i].StartsWith("<17>")) { EquipItemCheck(Index, packets[i]); }
        else if (packets[i].StartsWith("<18>")) { AttackCheck(Index, packets[i]); }
        else if (packets[i].StartsWith("<19>")) { DirCheck(Index, packets[i]); }
        else if (packets[i].StartsWith("<20>")) { PickItemCheck(Index); }
        else if (packets[i].StartsWith("<21>")) { DropItemCheck(Index, packets[i]); }
        else if (packets[i].StartsWith("<22>")) { ItemCheck(Index, packets[i]); }
        else if (packets[i].StartsWith("<23>")) { WeaponCheck(Index, packets[i]); }
        else if (packets[i].StartsWith("<24>")) { ArmorCheck(Index, packets[i]); }
    }
}

服务器接收信息,如:

代码语言:javascript
复制
<num>DATA\

我的问题是,当我向服务器发送类似“a ai”的文本时,服务器的内容如下:

代码语言:javascript
复制
<num>açai

当我发短信的时候

代码语言:javascript
复制
<num>text\

所以,发送是在Ruby中:

命令

代码语言:javascript
复制
@socket.send("<12>#{msg}\\")

发件人

代码语言:javascript
复制
  def send(data, flags = 0)
    result = Win32API.new('ws2_32', 'send', 'ppll', 'l').call(@descriptor, data, data.size, flags)
    result == -1 ? SocketError.check : result
  end

因为这一点,我不能分割字符串,而且它的长度很高。

有人有窍门或解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-06 20:11:44

我解决了这个问题。

代码语言:javascript
复制
byte[] buffer = new byte[client.TCPClient.Available];
client.TCPClient.GetStream().Read(buffer, 0, client.TCPClient.Available);

谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28373287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档