我刚从网络编程的考试中回到家,他们问我们的一个问题是"如果要播放视频,你会使用TCP还是UDP?为存储的视频和实时视频流提供解释".对于这个问题,他们只是简单地期望存储视频的TCP简短回答和实时视频的UDP,但我在回家的路上想到了这一点,并且使用UDP流媒体直播视频一定更好吗?我的意思是,如果你有足够的带宽,并说你正在播放足球比赛或音乐会,你真的需要使用UDP吗?
让我们说,当你正在流式音乐会或使用TCP的任何东西时,你开始丢失数据包(在你和发送者之间的某些网络中发生了一些不好的事情),并且整整一分钟你都没有得到任何数据包.视频流将暂停,一分钟后,数据包开始再次通过(IP为您找到了新的路由).然后会发生什么是TCP会在您丢失的那一刻重新传输并继续向您发送实时流.假设带宽高于流上的比特率,并且ping不是太高,所以在很短的时间内,丢失的那一分钟将作为流的缓冲区,这样,如果再次发生丢包,您将不会注意到.
现在,我可以想到一些设备,这不是一个好主意,例如视频会议,你需要总是在流的末尾,因为视频聊天期间的延迟是可怕的,但在足球比赛或音乐会期间,如果你在流后面一分钟,这有什么关系?此外,您可以保证获得所有数据,最好保存以供日后查看,而不会出现任何错误.
所以这让我想到了我的问题.关于使用TCP进行直播,我不知道有什么缺点吗?或者它应该真的是,如果你有它的带宽你应该去TCP,因为它对网络"更好"(流量控制)?
我想我理解该选项的正式含义.在我正在处理的一些遗留代码中,使用了该选项.客户抱怨RST作为对其接近的连接的FIN的回应.
我不确定我是否可以安全地将其删除,因为我不明白何时应该使用它.
能否举例说明何时需要该选项?
TCP中的流控制和拥塞控制有什么区别?
这个问题可以分为两部分:
根据Wikipedia,TCP流量控制依赖于ACK消息中报告的窗口大小.拥塞控制还依赖于确认消息.我想知道两个目标之间的区别,以及它们如何运作.
我听说过HTTP keep-alive但是现在我想打开一个与远程服务器的套接字连接.
现在这个套接字连接是否会永远保持打开状态,或者是否存在与之相关的超时限制,类似于HTTP keep-alive?
如何在客户端使用HTML5,CSS和JavaScript编写网站,以便在加载页面后允许客户端浏览器之间直接进行tcp/ip连接.
我需要这样做以减少延迟,因为该站点将要求其中一个用户的输入尽快传输给其他用户,因此从客户端A发送数据到服务器然后再发送到客户端B不是一个好的选项.
我读过以前关于这个主题的帖子,但是我找不到可用的解决方案/示例.从我读到的内容可以使用Silverlight,Java或Flash等插件进行客户端之间的直接连接.
有没有不需要插件的解决方案?我想只使用JavaScript.
有谁知道在现代标准根服务器上可以有多少个tcp-socket连接?(每个连接的流量通常较少,但所有连接都必须一直在运行.)
编辑:我们将使用Linux服务器.
如何检测客户端是否与服务器断开连接?
我有下面的代码在我的AcceptCallBack方法
static Socket handler = null;
public static void AcceptCallback(IAsyncResult ar)
{
//Accept incoming connection
Socket listener = (Socket)ar.AsyncState;
handler = listener.EndAccept(ar);
}
Run Code Online (Sandbox Code Playgroud)
我需要找到一种方法来尽快发现客户端已从handlerSocket 断开连接.
我试过了:
handler.Available;handler.Send(new byte[1], 0,
SocketFlags.None);handler.Receive(new byte[1], 0,
SocketFlags.None);当您连接到服务器并且想要检测服务器何时断开连接但是当您是服务器并且想要检测客户端断开连接时它们不起作用时,上述方法会起作用.
任何帮助将不胜感激.
有没有办法快速绑定到TCP端口/ IP地址,只需将所有信息打印到STDOUT?我有一个简单的调试解决方案,它将事情写入127.0.0.1:4444,我希望能够简单地从bash绑定一个端口并打印出来的所有内容.是否有捷径可寻?
关闭或重置TcpClient连接的正确方法是什么?我们有软件与硬件通信,但有时出现问题,我们不再与它通信,直到我们重新启动软件.
我已经尝试强制TcpClient.Close(),甚至将其设置为null但这不起作用.只有完全重启软件才能运行.
建议?
我不能使用using关键字,因为TpcClient仅在一个位置定义,但在整个库中使用.(并且在任何给定时间只有一个连接)
它是一个处理通信的库.软件本身可以调用Controller类的ResetConnection()方法(代表硬件).
它目前看起来像
if (tcpClient != null)
{
tcpClient.Close();
tcpClient = null;
}
Run Code Online (Sandbox Code Playgroud)
现在从我在这里读到的,我应该使用tcpClient.Dispose()而不是"= null"
我会尝试一下,看看它是否有所作为.
tcp ×10
sockets ×6
networking ×4
.net ×2
c# ×2
java ×2
linux ×2
bash ×1
connection ×1
html5 ×1
http ×1
javascript ×1
keep-alive ×1
max ×1
p2p ×1
setsockopt ×1
so-linger ×1
tcp-ip ×1
udp ×1
video ×1