我对C#比较新,所以请耐心等待。我正在研究客户端服务器应用程序(在C#,.NET 4.0中),我完全不了解一些事情。
假设TCP服务器和客户端之间存在已建立的连接。如果在另一个端点上没有调用 read ,可以(没有错误)将写入从一个端点写入基础流吗?
如果可以,您需要多长时间拨打 read()并仍然获取所有数据?如果存在某种缓冲区,缓冲区中可以包含多少数据以及它可以保留多长时间?如果你不打电话读取一段时间(最新,最老,......?)
,哪些数据会丢失如果你同时调试客户端和服务器应用程序会有问题,是否会发生连接似乎被关闭,因为一个应用程序正在等待在调试模式下进行下一步?
感谢您宝贵的时间和答案。
答案 0 :(得分:1)
假设TCP服务器和客户端之间存在已建立的连接。如果在另一个端点上没有调用read,那么可以(没有错误)从一个端点写入底层流吗?
是。操作系统在其套接字实现中为每个套接字都有一个内部缓冲区。一切都将被存储,直到缓冲区已满。
如果可以,您需要多长时间调用read()并仍然获取所有数据?缓冲区中可以有多少数据,如果有某种缓冲区,它会保留多长时间?如果你不打电话读取一段时间(最新,最老,......?)
,哪些数据会丢失
这一切都取决于缓冲区的大小以及另一个端点向其发送数据的频率。您可以使用Socket.ReceiveBufferSize
进行调整。
如果同时调试客户端和服务器应用程序,是否会出现问题,是否会发生连接似乎已关闭,因为一个应用程序正在等待在调试模式下进行下一步?
没有。除非其中一个端点关闭,否则TCP连接始终处于打开状态。请记住,如果使用异步IO并且不破坏每个应用程序中的所有线程,代码的其他部分可以关闭连接。