HTTPS代理和线程

时间:2018-04-08 14:14:20

标签: c# multithreading https proxy


我正在编写代理,它将置于浏览器和网站之间的通信中间,并不关心HTTPS数据的内容,它只是将浏览器之间的所有内容翻译回来。
以下是可用的代码的一部分(流是NetworkStreams):

while(true)
{
    using (MemoryStream ms = new MemoryStream())
    {
        do
        {
            int length = (tcpclientBrowser.Available > 0) ? (tcpclientBrowser.Available) : (0);
            byte[] buff = new byte[length];
            if (length != 0) streamBrowser.Read(buff, 0, length);
            ms.Write(buff, 0, length);
        } while (tcpclientBrowser.Available > 0);
        byte[] dataRec = ms.ToArray();
        if (dataRec.Length != 0) streamSite.Write(dataRec, 0, dataRec.Length);
    }

    using (MemoryStream ms = new MemoryStream())
    {
        do
        {
            int length = (tcpclientSite.Available > 0) ? (tcpclientSite.Available) : (0);
            byte[] buff = new byte[length];
            if (length != 0) streamSite.Read(buff, 0, length);
            ms.Write(buff, 0, length);
        } while (tcpclientSite.Available > 0);
        byte[] dataRec = ms.ToArray();
        if (dataRec.Length != 0) streamBrowser.Write(dataRec, 0, dataRec.Length);
    }
}

基本上它只是读取浏览器流上的所有可用内容,将其发送到站点,读取站点流上的所有可用内容,将其发送到浏览器,非常简单。 但是它在同一个线程中工作,而不是并行工作,所以我想在while(true)之前创建单独的线程,将tcpclients和networkstreams传递到这个线程中并使while(true)在那里有一个do {}周期,就像这个(伪代码):

class Original {
    CreateNewThread();
    while(true) {
        ReadFromBrowser();
        SendToSite();
    }
}

class NewThread {
    while(true) {
        ReadFromSite();
        SendToBrowser();
    }
}

我做到了,它就停止了工作。据我所知,线程内的streamSite.Read()只是不读取任何数据,即使已经将某些数据发送到网站。
我还检查了它是否会起作用,如果我只是在我刚创建的同一个线程中做{}' s它工作。
有一件事我注意到它在执行TLS握手时会挂起 不允许在单独的帖子中读取和写入浏览器和网站,或者在其他地方出错?

0 个答案:

没有答案