Httpwebrequest(客户端写入模式)到TCPclient(服务器读取模式)的方法



我正在使用传统的服务器-客户端模型通过网络发送数据。

这里,服务器在一个特定的地址和端口启动Tcplistener。在这种情况下,它是本地主机。

客户端使用.net中的WebRequest类,获取请求流并开始将数据写入请求流。

让我浏览一下服务器代码类:

TcpListener tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"),9309);
tcpListener.Start()//Start the listener and wait for client to connect.
while(true)
{
TcpClient newclient = tcpListener.AcceptTcpClient();
if(newclient.Connected())
{
break;
}
}
while(true)
{

ReadData(newclient);
}
public void ReadData(TcpClient newclient)
{
byte[] buffer = newbyte[50];
Stream ns = newclient.GetStream();     
ns.Read(buffer, 0, buffer.Length);
Console.WriteLine( Encoding.UTF8.GetString(buffer));
}

//服务器类结束。

现在让我们看看客户端代码类:-

WebRequest Request = HttpWebRequest.Create(http://127.0.0.1:9309/DataChannel);
Request.Method = "POST";  
//Below method registers to Server's AcceptTcpClient  and tcpclient is assigned.     
Stream NetworkStream = ModifyCollimationRequest.GetRequestStream();
int DataWritten = 0;
while(true)
{
string Dname = "rnPosting server with Data as {0}rn";
byte[] dbytes = Encoding.UTF8.GetBytes(string.Format(Dname, ++DataWritten));
ns.WriteAsync(dbytes, 0, dbytes.Length);
ns.FlushAsync();
}
//End of Client code. Once the connection is established, the client keeps writing into the stream till the buffer size of >65000 is reached without issue but the problem is with the Server.

在服务器中,流ns=新客户端。GetStream((->服务器的ReadData((方法下的这一行执行,但是下一行是使用Read((的代码->代码不会引发异常,也不会到达下一行。它只是在调试或超时时退出。有人感觉,我无法取回小溪,或者小溪是空的。但客户一直在写,没有任何问题。有时可以尝试一下,帮助我弥补我所缺少的。最终,我应该能够在任何情况下读取流中可用的数据,但不确定原因。请添加您的建议?

在客户端代码的末尾,我们需要调用下面的方法将数据启动实际的流

ResponseStream = (HttpWebResponse)Request.GetResponse(); 

这是因为这里面好像有个bug。NET API,其中缓冲数据仅在调用GetResponse()流时发送。这为我解决了问题。

下面的StackOverflow URL帮助我了解了有关此问题的更多信息HttpWebRequest。GetRequestStream返回的流不会立即在中发送数据。NET核心

最新更新