Questions tagged «sockets»

双向进程间通信流的端点。这通常是指通过网络连接的过程流,但绝不限于此。不要与WebSocket(协议)或其他抽象(例如socket.io)混淆。

11
如何配置套接字连接超时
当客户端尝试连接到断开的IP地址时,超时时间超过15秒...我们如何减少此超时时间?什么是配置方法? 我用来建立套接字连接的代码如下: try { m_clientSocket = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress.Parse(serverIp); int iPortNo = System.Convert.ToInt16(serverPort); IPEndPoint ipEnd = new IPEndPoint(ip, iPortNo); m_clientSocket.Connect(ipEnd); if (m_clientSocket.Connected) { lb_connectStatus.Text = "Connection Established"; WaitForServerData(); } } catch (SocketException se) { lb_connectStatus.Text = "Connection Failed"; MessageBox.Show(se.Message); }
104 c#  sockets  timeout 


6
传输一定数量的数据后,Chrome挂起-等待可用的套接字
我有一个浏览器游戏,最近我开始向游戏添加音频。 Chrome不会加载整个页面,并且会卡在其中"91 requests | 8.1 MB transferred",并且不会加载任何其他内容;甚至在其他所有标签中都破坏了该网站Waiting for available socket。 5分钟后(准确),数据被加载。 在任何其他浏览器上都不会发生这种情况。 删除一个MP3文件(最新添加的一个)可以解决此问题,那么这是否可能是数据限制问题?


15
我是否需要心跳以保持TCP连接打开?
我有两个通过TCP / IP进行通信的组件。组件A充当服务器/侦听器,而组件B充当客户端。两者应尽快沟通。任何时候都只能有一个连接(尽管此问题除外)。我公司的一位高级开发人员表示,我需要在两个组件之间使用应用程序级心跳,以确保连接保持打开状态。 我以为使用TCP / IP可以保持连接打开,但是我读过许多博客/站点,这是在这些应用程序之间进行心跳检测的非常标准的做法。 我知道组件A心跳组件B的部分原因是,它可以在组件B存在通信问题(链接断开或组件B未运行)时通知支持。是否由于其他原因需要心跳?如要确保经常有“管道中的东西”保持打开状态? 当前,组件A每20秒对组件B进行一次心跳检测,如果在120​​秒内没有收到来自组件B的任何反馈,则关闭连接。然后假定组件B在链路断开的情况下会定期尝试重新连接,它会继续侦听连接。这可以成功工作。 重申我的问题:是否必须保持心跳才能保持TCP / IP连接的活动?
94 sockets  tcp 

3
UNIX非阻塞I / O:O_NONBLOCK与FIONBIO
在BSD套接字编程的上下文中,我遇到的每个示例和讨论中,似乎都建议将文件描述符设置为非阻塞I / O模式的推荐方法是使用O_NONBLOCK标志fcntl(),例如 int flags = fcntl(fd, F_GETFL, 0); fcntl(fd, F_SETFL, flags | O_NONBLOCK); 我从事UNIX的网络编程已经有十多年了,并且一直使用该FIONBIO ioctl()调用来执行此操作: int opt = 1; ioctl(fd, FIONBIO, &opt); 从来没有真正考虑过为什么。只是这样学习而已。 有没有人对一个或另一个可能有的优点发表评论?我认为可移植性的位置有所不同,但不知道在何种程度ioctl_list(2)上没有谈到单个ioctl方法的这一方面。

13
当您需要可靠的UDP时使用什么?
如果您遇到TCP连接可能太慢而UDP'连接'可能太不可靠的情况,该怎么使用?有各种各样的标准可靠的UDP协议,您对它们有什么经验? 请针对每个答复讨论一种协议,如果其他人已经提及您使用的协议,则可以考虑将其投票,并在需要时使用评论详细说明。 我对这里的各种选项感兴趣,其中TCP处于规模的一端,而UDP处于另一端。提供了各种可靠的UDP选项,每个选项都将TCP的某些元素引入UDP。 我知道,TCP通常是正确的选择,但是列出替代方案通常有助于帮助得出这一结论。基于UDP构建的诸如Enet,RUDP等之类的东西各有利弊,您使用过它们,您的经验是什么? 为避免疑问,没有更多的信息,这是一个假设性的问题,我希望能引出一系列答复,详细说明需要做出决定的人可以使用的各种选择和替代方案。

12
为什么在没有尝试I / O的情况下不可能检测到TCP套接字已被对等端正常关闭?
作为对最近一个问题的回应,我想知道为什么在Java中如果不尝试在TCP套接字上进行读/写操作就无法检测到套接字已被对等端正常关闭了,这是为什么?不管是使用pre-NIO Socket还是NIO,似乎都是这种情况SocketChannel。 当对等方正常关闭TCP连接时,连接两端的TCP堆栈都会知道这一事实。服务器端(启动关闭操作的服务器)以状态结束FIN_WAIT2,而客户端端(未明确响应关闭操作的服务器)以状态服务器结束CLOSE_WAIT。为什么没有一个方法Socket或SocketChannel可以查询TCP堆栈看到底层的TCP连接是否已经终止?TCP堆栈不提供此类状态信息吗?还是为了避免昂贵地调用内核而做出的设计决定? 在已经发布了该问题的一些答案的用户的帮助下,我认为我知道问题可能来自何处。没有显式关闭连接的那一侧将以TCP状态结束,CLOSE_WAIT这意味着该连接正在关闭过程中,并等待该一侧发出自己的CLOSE操作。我想这是公平的,以至于isConnected收益true和isClosed回报false,但为什么没有像isClosing? 以下是使用pre-NIO套接字的测试类。但是使用NIO可以获得相同的结果。 import java.net.ServerSocket; import java.net.Socket; public class MyServer { public static void main(String[] args) throws Exception { final ServerSocket ss = new ServerSocket(12345); final Socket cs = ss.accept(); System.out.println("Accepted connection"); Thread.sleep(5000); cs.close(); System.out.println("Closed connection"); ss.close(); Thread.sleep(100000); } } import java.net.Socket; public class MyClient { public static …

8
Java套接字API:如何判断连接是否已关闭?
我遇到了Java套接字API的一些问题。我正在尝试显示当前连接到我的游戏的玩家数量。很容易确定播放器何时连接。但是,似乎似乎很难确定何时使用套接字API断开了播放器。 呼叫isConnected()已断开远程似乎总是返回一个插座上true。同样,调用isClosed()已远程关闭的套接字似乎总是会返回false。我读过要真正确定套接字是否已关闭,必须将数据写入输出流,并且必须捕获异常。这似乎是处理这种情况的一种非常不干净的方法。我们只需要不断地在网络上发送垃圾邮件来知道套接字何时关闭。 还有其他解决方案吗?

9
Python [Errno 98]地址已在使用中
在我的Python套接字程序中,有时需要用中断它Ctrl-C。当我这样做时,它确实使用关闭了连接socket.close()。 但是,当我尝试重新打开它时,我必须等待一分钟左右才能重新连接。如何正确关闭插座?还是打算这样做?

7
如何删除CLOSE_WAIT套接字连接
我编写了一个与特定端口上的服务器交互的小程序。该程序工作正常,但是: 一旦程序意外终止,并且此套接字连接一直处于CLOSE_WAIT状态显示。如果尝试运行程序,它将挂起,并且必须强制将其关闭,这会累积更多的 CLOSE_WAIT套接字连接。 有没有办法清除这些连接?
91 linux  sockets 

10
是否有多个进程共享侦听套接字的方法?
在套接字编程中,您将创建一个侦听套接字,然后为每个连接的客户端获得一个正常的流套接字,可用于处理客户端的请求。操作系统管理后台的传入连接队列。 默认情况下,两个进程不能同时绑定到同一端口。 我想知道是否有一种方法(在任何知名的OS上,尤其是Windows上)启动一个进程的多个实例,以使它们全部绑定到套接字,从而有效地共享队列。每个流程实例可以是单线程的;接受新的连接时它将阻塞。当客户端连接时,一个空闲的流程实例将接受该客户端。 这将允许每个进程具有非常简单的单线程实现,除非通过显式共享内存,否则不共享任何内容,并且用户将能够通过启动更多实例来调整处理带宽。 是否存在这样的功能? 编辑:对于那些问“为什么不使用线程?”的人 显然,线程是一个选择。但是在单个进程中有多个线程的情况下,所有对象都是可共享的,因此必须格外小心,以确保对象不是共享的,或者一次仅对一个线程可见,或者是绝对不变的,并且大多数流行的语言和运行时缺少用于管理这种复杂性的内置支持。 通过启动几个相同的工作进程,您将获得一个并发系统,其中的默认设置为不共享,从而使构建正确且可扩展的实现变得更加容易。

5
设置套接字操作超时
创建套接字时: Socket socket = new Socket(ipAddress, port); 因为IP地址不可用,它会引发一个异常,这是可以的。(测试变量whereString ipAddress = "192.168.0.3"和int port = 300。) 问题是:如何将该套接字设置为超时? 创建套接字时,如何减少获取aUnknownHostException并使套接字超时之前的时间?
86 java  sockets 


5
了解INADDR_ANY进行套接字编程
我正在尝试编程一些套接字,因此在服务器端,我使用htonl(INADDR_ANY)。就我所知,在我看来,该功能会生成一个随机IP(我正确吗?)。实际上,我想将套接字与绑定localhost。但是如果我运行这个 printf("%d",htonl(INADDR_ANY)); 我得到0作为返回值。有人可以带来一些解释吗?
84 c  sockets 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.