草庐IT

socket_handle

全部标签

sockets - 是否可以将 UDP 与 socket.io 一起使用?

我正在开发一款游戏,听说UDP更适合实时游戏。我知道socket.io使用TCP,想知道是否有某种方法可以将其切换为UDP。我尝试查找它,但只找到了2012年左右的帖子,其中说UDP仅在浏览器中处于试验阶段。 最佳答案 在标准浏览器中,这是不可能的。从浏览器客户端,socket.io使用http或webSocket传输。http和webSocket都是TCP连接,不是UDP连接。所以浏览器客户端socket.io不使用UDP——它使用TCP。据我所知,在可从常规HTML页面Javascript访问的浏览器中没有标准的UDP支持,因此

sockets - 同时使用 accept() 和 select() ?

我有一个事件驱动的网络服务器程序。该程序接受来自其他主机上其他进程的连接。同一远程IP上的不同端口可能有许多短暂的连接。目前,我有一个while(1)调用accept()的循环然后生成一个线程来处理新连接。读取消息后关闭每个连接。在远程端,发送消息后关闭连接。我想通过缓存打开的套接字FD来消除建立和拆除连接的开销。在发件人方面,这很简单-我只是不关闭连接,并保持它们在身边。在接收端,有点难。我知道我可以存储accept()返回的FD在结构中并使用poll()监听所有此类套接字中的消息或select(),但我想同时通过accept()监听新连接和监听所有缓存的连接。如果我使用两个线程,一

sockets - 当我将数据写入阻塞套接字时会发生什么,比另一端读取更快?

假设我非常快地将数据写入阻塞套接字[我将所有数据都存储在内存中]。进一步假设另一方读取数据的速度非常慢[比如每次读取之间sleep1秒]。在这种情况下,写作方面的预期行为是什么?写入操作会阻塞直到另一端读取足够的数据,还是会返回连接重置之类的错误? 最佳答案 对于阻塞套接字,send()调用将阻塞,直到所有数据都已复制到该连接的网络堆栈缓冲区中。它不必由另一方接收。此缓冲区的大小取决于实现。当远程端确认数据时,数据从缓冲区中清除。这是操作系统的事情,不依赖于实际读取数据的远程应用程序。此缓冲区的大小也取决于实现。当远程缓冲区已满时,

sockets - send() 之后直接关闭() 套接字 : unsafe?

在最后一个send()之后直接close()套接字是否明智/安全?我知道即使在关闭套接字后,TCP也应该尝试传送发送缓冲区中的所有剩余数据,但我真的可以指望它吗?我正在确保我的接收缓冲区中没有剩余数据,以便在我关闭后不会发送RST。在我的例子中,关闭实际上是调用exit()之前的最后一个代码语句。即使在发送数据的进程终止后,TCP堆栈真的会继续尝试传输数据吗?这是否与在通过设置SO_LINGER调用close()之前自己等待任意超时一样可靠?也就是说,应用相同的TCP超时还是更短?毕竟,如果发送缓冲区很大且连接速度较慢,实际传输所有缓冲数据的时间可能会很长。我对收到发送的最后一个字节的

sockets - TCP 是双向的还是全双工的?

双向和全双工是不同的概念。例如,Ethernet只是半双工的,因为在特定时间,只有一台主机可以通过线路发送数据,并且它不能同时发送和接收数据。所以当我们在以太网上使用TCP时,我认为TCP只是双向或半双工的。但是here它说TCP是全双工的。为什么? 最佳答案 两者兼而有之。它是双向的,因为它可以在两个方向上发送数据,它是全双工的,因为它可以在API级别同时发送数据,而不需要线路周转。当然,在较低级别上,它可能会受到可用物理层的限制。 关于sockets-TCP是双向的还是全双工的?,我

sockets - TCP监听器和套接字之间的区别

据我所知,我可以同时使用TCPListener和Socket创建服务器,那么它们两者之间有什么区别?套接字privateSocketMainSock;MainSock=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);MainSock.Bind(newIPEndPoint(IPAddress.Any,port));MainSock.Listen(500);MainSock.BeginAccept(AcceptConnections,newWrapper());TCPListenerInt32

sockets - 哪些书)学习套接字编程和TCP网络通信?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。关闭8年前。Improvethisquestion我将在接下来的几个月里做一些小项目,需要一些书籍(最好)或URL来学习一些基本概念。通常,一台PC或嵌入式设备(因项目而异)从外部硬件设备收集一些用户输入或数据,并将其传输到远程PC,后者将其输入数据库。后端将使用Indy套接字组件在Delphi中编

networking - TCP Socket 无连接超时

我打开一个TCP套接字并将其连接到网络上其他地方的另一个套接字。然后我可以成功发送和接收数据。我有一个定时器,每秒向套接字发送一些东西。然后我通过强行断开连接(在这种情况下拔出以太网电缆)粗暴地中断了连接。我的套接字仍在报告它正在每秒成功地写出数据。这将持续大约1小时30分钟,最终出现写入错误。什么指定了一个套接字最终接受另一端消失的超时?是操作系统(Ubuntu11.04),是来自TCP/IP规范,还是套接字配置选项? 最佳答案 虽然会中断通信,但拔出网络电缆不会断开TCP连接(1)。您可以重新插入电缆,一旦建立IP连接,所有备份

sockets - 为什么在 TCP 中使用 bind()?为什么它只用在服务器端而不用在客户端?

我想知道bind()在TCP中的确切功能。将本地地址“绑定(bind)”到套接字是什么意思?如果它为套接字分配一个端口号,那我们为什么不在客户端使用它呢?我知道端口是由操作系统在客户端自动分配的,但我并没有全面了解这一切是如何工作的。在bind()之后,我们进行listen()。绑定(bind)与listen()有何关系?listen()会知道bind()已经执行了吗?如果是这样,bind()做了哪些更改以使其为人所知?我的意思是,返回零对成功执行有何帮助?我已经了解了很多定义,但我无法从哪里获得所有这些的详细信息。因此,如果有人能向我解释一下,我将不胜感激。

sockets - 什么时候需要 TCP 选项 SO_LINGER (0)?

我想我理解选项的正式含义。在我现在处理的一些遗留代码中,使用了该选项。客户提示RST作为从其一侧关闭连接时对FIN的响应。我不确定我是否可以安全地删除它,因为我不明白什么时候应该使用它。您能否举例说明何时需要该选项? 最佳答案 设置SO_LINGER的典型原因超时为零是为了避免大量连接坐在TIME_WAIT状态,占用服务器上的所有可用资源。当一个TCP连接被干净地关闭时,发起关闭(“主动关闭”)的一端以位于TIME_WAIT中的连接结束。几分钟。因此,如果您的协议(protocol)是服务器启动连接关闭的协议(protocol),并