C# Win8 IRC应用程序问题

C# Win8 IRC应用程序问题,c#,windows-runtime,irc,C#,Windows Runtime,Irc,我一直在尝试为Windows8编写一个IRC客户端应用程序。我遇到了一些问题。我已经从pytho的本教程开始: 生成以下代码(对于python 3.3)。它成功地连接到服务器,被识别并登录,直到我关闭客户端 server = "irc.location.net" from socket import * def main(): s = socket(AF_INET, SOCK_STREAM) s.connect((server, 6667)) readbuffer =

我一直在尝试为Windows8编写一个IRC客户端应用程序。我遇到了一些问题。我已经从pytho的本教程开始: 生成以下代码(对于python 3.3)。它成功地连接到服务器,被识别并登录,直到我关闭客户端

server = "irc.location.net"
from socket import *

def main():
    s = socket(AF_INET, SOCK_STREAM)
    s.connect((server, 6667))
    readbuffer = ""
    s.send("NICK testIRC\r\n".encode())
    s.send("USER testIRC irc.location.net welcome :Test_IRC\r\n".encode())

    while 1:
        readbuffer = readbuffer + s.recv(1024).decode()
        temp = readbuffer.split("\n")
        readbuffer = temp.pop()

        for line in temp:
            line = line.rstrip();
            tokens = line.split(' ');

            if (tokens[0] == "PING"): 
                print("Got: %s\n" % line);
                response = "PONG %s\r\n" % tokens[1];
                s.send(response.encode())
                print("Sending: %s\n\n" % response)

if __name__ == "__main__":
    main();
然后我尝试将其移植到C#(.NET4.5),结果如下所示。但是,此代码不会给出与Python代码相同的结果。 我认为可能会发生以下情况,但我不确定:服务器无法识别编码(我认为这很奇怪)。让一切变得更奇怪的是,我得到了1个ping,其中包含一些看起来像键(一些十六进制值)的东西,我会用一个pong来响应它。 在第一次ping之后,我什么也没有收到,而且我也没有在用户列表中列出。 但除了编码问题,我想不出任何东西。你们中有人能发现我代码中的错误吗?先谢谢你

StreamSocket ss = new StreamSocket();
await ss.ConnectAsync(new HostName(server_address), 6667.ToString());

DataWriter dw = new DataWriter(ss.OutputStream);
DataReader dr = new DataReader(ss.InputStream);
dr.InputStreamOptions = InputStreamOptions.Partial;

// Text related stuff
byte[] bytes;

// register
bytes = enc.GetBytes("NICK testIRC\r\n"); // enc is of type Encoding and is created as an UTF8Encoding.
dw.WriteBytes(bytes);
bytes = enc.GetBytes("USER testIRC irc.location.net welcome :Test_IRC\r\n");
dw.WriteBytes(bytes);
await dw.StoreAsync();
await dw.FlushAsync();

int ping_count = 0;

while (true)
{
    await dr.LoadAsync(512);
    string msg = dr.ReadString(dr.UnconsumedBufferLength);

    string[] lines = msg.Split(new string[]{"\n"}, StringSplitOptions.RemoveEmptyEntries);
    foreach(string line in lines)
    {
        string cmd = line.TrimEnd('\r');

        if (cmd.StartsWith("PING "))
        {
            ping_count++;

            string[] tokens = cmd.Split(' ');

            // Create response
            string response = "PONG " + tokens[1];
            bytes = enc.GetBytes(response);

            dw.WriteBytes(bytes);
            dw.StoreAsync();
            dw.FlushAsync();
        }
    }
}

如果您怀疑这是编码问题:当您使用ASCII而不是UTF-8时会发生什么?什么是
DataWriter
?使用
BinaryWriter
时会发生什么?此外,写入数据并不意味着数据是“发送的”(通常是缓冲的)。确保刷新流以确保它已发送。@Jeff E:不幸的是,使用ASCII并没有改变任何事情。在windows8应用程序运行时,没有AscienceODing类,所以我必须编写一个函数将所有内容转换为ASCII,我基本上是这样做的:foreach(str中的字符c){buffer[index]=(byte)(c&0xff);index++;}buffer[str.length]=0;Dai,Datawriter:,如果您已经阅读了代码,您会看到我同时调用了.StoreAsync和.FlushAsync,而且,我在对StoreAsync和FlushAsync的最后调用中添加了wait。刚才检查了pythons.encode()函数中使用的编码。在我的系统上,它是UTF-8。发现问题后,PONG没有以“\r\n”结尾。