Tag: 套接字

官方原因“软件导致连接中止:套接字写入错误”

给定这个堆栈跟踪片段 导致:java.net.SocketException:软件导致连接中止:套接字写入错误 在java.net.SocketOutputStream.socketWrite0(本地方法) 我试图回答以下问题: 什么代码抛出这个exception? (JVM?/ Tomcat?/我的代码?) 是什么导致这个exception被抛出? 关于#1: Sun的JVM源不包含这个确切的消息,但我认为文本软件导致连接中止:套接字写入错误是从本地实现SocketOutputStream : private native void socketWrite0(FileDescriptor fd, byte[] b, int off, int len) throws IOException; 关于#2 我的猜测是,这是当客户端已经终止连接,在得到完整的响应之前(例如发送请求,但在得到完整的响应之前,它被closures/终止/离线) 问题: 上述假设是否正确(#1和#2)? 这可以从这种情况分歧:“由于服务器端的networking错误,无法写入客户端”? 或者会呈现相同的错误信息? 最重要的是 : 是否有官方文件(例如来自Sun)说明上述情况? 我需要certificate这个堆栈跟踪是套接字客户端的“错误”,并且服务器没有办法避免它。 (除了捕获这个exception,或者使用一个非Sun Java虚拟机的SocketOutputStream,虽然两者都不能真正避免客户端终止的事实)

立即检测客户端从服务器插座断开连接

如何检测客户端与我的服务器断开连接? 我的AcceptCallBack方法中有以下代码 static Socket handler = null; public static void AcceptCallback(IAsyncResult ar) { //Accept incoming connection Socket listener = (Socket)ar.AsyncState; handler = listener.EndAccept(ar); } 我需要找到一种方法来尽快发现客户端与handler Socket断开连接。 我试过了: handler.Available; handler.Send(new byte[1], 0, SocketFlags.None); handler.Receive(new byte[1], 0, SocketFlags.None); 当你连接到一个服务器并想要检测服务器什么时候断开,但是当你是服务器并且想要检测客户端断开时它们不工作时,上述方法是有效的。 任何帮助将不胜感激。

什么导致我的java.net.SocketException:连接重置?

我们看到频繁的java.net.SocketException: Connection reset在我们的日志中为调用发送SMS消息的第三方Web服务的组件java.net.SocketException: Connection reset错误。 我们的应用程序是用Java编写的,运行在Tomcat 5.5之上。 这是由不再和我们在一起的承包商写的。 目前的团队没有真正的Java专业知识,我们不确定Connection reset错误实际来自何处,以及如何进行调试。 这个问题似乎完全是间歇性的,与我们试图发送的消息无关。 对于这个例外的典型原因可能是什么以及我们如何继续下去的任何建议都是值得欢迎的。 整个调用堆栈包含在内,以确保完整性。 ( com.companyname.mtix.sms是我们的组件) java.net.SocketException:连接重置 在java.net.SocketInputStream.read(SocketInputStream.java:168) 在java.io.BufferedInputStream.fill(BufferedInputStream.java:218) 在java.io.BufferedInputStream.read(BufferedInputStream.java:235) 在org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:77) 在org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105) 在org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1115) 在org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1832) 在org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1590) 在org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:995) 在org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:397) 在org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170) 在org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396) 在org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324) 在com.companyname.mtix.sms.services.impl.message.SendTextMessage.sendTextMessage(SendTextMessage.java:127) 在com.companyname.mtix.sms.services.MessageServiceImpl.sendTextMessage(MessageServiceImpl.java:125) 在com.companyname.mtix.sms.services.remote.MessageServiceRemoteImpl.sendTextMessage(MessageServiceRemoteImpl.java:43) 在sun.reflect.GeneratedMethodAccessor203.invoke(未知来源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect.Method.invoke(Method.java:585) 在org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397) 在org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186) 在org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323) 在org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) 在org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) 在org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) 在org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453) 在org.apache.axis.server.AxisServer.invoke(AxisServer.java:281) 在org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:709) 在org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 在com.companyname.mtix.sms.http.filters.NoCacheFilter.doFilter(NoCacheFilter.java:63) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 在com.companyname.mtix.sms.http.filters.MessageFilter.doFilter(MessageFilter.java:53) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) […]

两个应用程序可以听同一个端口吗?

同一台计算机上的两个应用程序可以绑定到相同的端口和IP地址吗? 更进一步,一个应用程序可以监听来自某个IP的请求,另一个可以监听另一个远程IP的请求吗? 我知道我可以有一个应用程序开始两个线程(或叉)具有类似的行为,但可以有两个没有共同点的应用程序相同的?