我与服务器建立了SSL连接并向其发布请求。发布消息的行为应该是即时的,没有延迟来阅读响应,因为会有一些后续帖子应该没有延迟。
这就是我做的原因
this.sslStream.Write(byteArray, 0, byteArray.Length);
但是,我需要一些响应来实际收到我的应用程序,所以我有一个并行线程:
this.threadReadStream = new Thread(new ThreadStart(this.ThreadReadStream));
this.threadReadStream.Start();
在该线程中,我有一个从sslStream读取数据的循环:
public void ThreadReadStream()
{
int bufferLen = 4096, byteCount, pos, pos2;
var buffer = new byte[bufferLen];
string responseBuffer = "", responsePart, response = "";
bool err = true;
while (true)
{
err = true;
byteCount = 0;
while (err)
{
err = false;
byteCount = 0;
try
{
byteCount = this.sslStream.Read(buffer, 0, bufferLen);
}
catch (Exception exception)
{
err = true;
this.TcpConnect();
}
}
if (byteCount > 0)
{
// do something
}
}
}
问题是sslStream.Read在单独的线程中使用时总是返回0,但如果在sslStream.Write的同一个线程中调用,则工作正常。
很少有关于不太可能影响问题的事情的评论,但是,最好澄清一下这些事情: 1)我使用while(err)循环来检查连接是否断开。如果是这样,我重新连接并再次阅读。 2)对于那些不喜欢(真实)事物的人。是的,我在并行线程的循环中有退出条件,它关闭了所有与tcp相关的线程。
答案 0 :(得分:0)
服务器如何识别写入过程已结束? 也许实际上有一条数据通往服务器,所以它不会开始发送响应。 此外,在不同线程之间共享TCP连接不是一个好习惯。