标签: socket-timeout-exception

Java - readObject()和setSoTimeout()

所以,我在我的客户端写了一个线程,它试图readObject()从套接字流.

该线程在客户端连接时运行.

可以在客户端的GUI上关闭与服务器的连接.如果客户端通过单击"断开连接"菜单选项决定断开连接(这不会退出客户端程序),则将关闭套接字并将a isConnected设置为false.

由于客户端读取线程尝试readObject()从流,而连接可以通过GUI关闭,我将超时设置为250毫秒(setSoTimeout(250)).

@Override
public void run()
{
  this.connection = this.connectionHandler.getSocket();
  while(connectionHandler.isConnected())
  {
    this.readCircle();
  }
  this.connectionHandler.setReadTaskRunning(false);
}

private void readCircle()
{
  try
  {
    this.connection.setSoTimeout(250);
    this.connectionHandler.readData(); //this uses readObject().
  }
 catch(SocketTimeoutException timeout){}
 catch(...){}
Run Code Online (Sandbox Code Playgroud)

}

我知道readObject()会阻塞,并检查客户端是否仍然连接,我将其包装在一个中while,检查(每次超时)客户端套接字是否仍然连接.

我现在的问题是:

如果readObject()开始获取服务器传递的对象,尝试读取它,但在处理超时时,流上的数据会以某种方式被"损坏",因为它被取消了.或者我应该让readObject()块,并在GUI线程想要关闭套接字时捕获异常.

我对套接字不太熟悉,也许我的方法完全错了.

java sockets socket-timeout-exception

6
推荐指数
1
解决办法
1841
查看次数

Spark(使用Scala)抛出SocketException:连接重置和SocketTimeoutException:读取超时

我试图将(非常大的)序列化RDD对象加载到ec2节点集群的内存中,然后对这些对象进行一些提取并将生成的RDD存储在磁盘上(作为目标文件).不幸的是,我得到SocketException: Connection reset过一次SocketTimeoutException: Read timed out.

这是我的代码的相关部分:

val pairsLocation = args(0)
val pairsRDD = sc.objectFile[Pair](pairLocation)
// taking individual objects out of "Pair" objects (containing two of those simple objects)
val extracted = pairsRDD.filter(myFunc(_._1)).
      flatMap(x => List(x._1, x._2)).distinct
val savePath = "s3 URI"
extracted.saveAsObjectFile(savePath)
Run Code Online (Sandbox Code Playgroud)

以下是我得到的错误(警告)的详细信息:

15/03/12 18:40:27 WARN scheduler.TaskSetManager: Lost task 574.0 in stage 0.0 (TID 574, ip-10-45-14-27.us-west-2.compute.internal): 
java.net.SocketException: Connection reset
  at java.net.SocketInputStream.read(SocketInputStream.java:196)
  at java.net.SocketInputStream.read(SocketInputStream.java:122)
  at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
  at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:554)
  at sun.security.ssl.InputRecord.read(InputRecord.java:509)
  at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:934)
  at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:891)
  at sun.security.ssl.AppInputStream.read(AppInputStream.java:102) …
Run Code Online (Sandbox Code Playgroud)

scala socketexception socket-timeout-exception apache-spark

6
推荐指数
0
解决办法
4946
查看次数

java.net.SocketTimeoutException 与改造

我正在使用 Retrofit 和 OkHttp 连接到服务器。大多数时候效果很好。但在某些情况下它会失败。有时 HTTP失败: java.net.UnknownHostException,有时 java.net.SocketTimeoutException。这个错误是当我使用家庭 wifi 连接到服务器时出现的。但是当我使用移动网络时,它是好的,没有问题。配合模拟器使用还是不错的。它只发生在真实设备上。而且只是某些时候而不是所有时候。

OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
    httpClient.readTimeout(30, TimeUnit.SECONDS)
            .connectTimeout(30, TimeUnit.SECONDS)
            .writeTimeout(30, TimeUnit.SECONDS)
            .build();



    retrofit = new Retrofit.Builder()
            .baseUrl(ClientConfigs.REST_API_BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .client(httpClient.build())
            .build();


compile 'com.squareup.retrofit2:retrofit:2.2.0'
 compile 'com.squareup.retrofit2:converter-gson:2.1.0'
Run Code Online (Sandbox Code Playgroud)

android socket-timeout-exception retrofit

6
推荐指数
1
解决办法
4379
查看次数

Python FTP套接字超时处理

我在使用python35 ftplib处理套接字超时时遇到问题。当发生套接字超时错误时,由于某种原因,我无法捕获该异常,并且脚本无论如何都会引发错误并退出。这是相关的代码块:

    try:
        ftp = FTP(self.config.base_url, timeout=400)
        ftp.login()
        ftp.cwd(self.config.root_path)
        ftp.retrbinary("RETR {0}".format(os.path.join(self.root_path, file_path)), fp.write, 1024)
        ftp.quit()
    except socket.timeout:
        self.download_file(file_path)
Run Code Online (Sandbox Code Playgroud)

由于某种原因,该脚本仍会因套接字超时异常而出错,这怎么可能?通用包也不行。这是错误的堆栈跟踪:

    try:
        ftp = FTP(self.config.base_url, timeout=400)
        ftp.login()
        ftp.cwd(self.config.root_path)
        ftp.retrbinary("RETR {0}".format(os.path.join(self.root_path, file_path)), fp.write, 1024)
        ftp.quit()
    except socket.timeout:
        self.download_file(file_path)
Run Code Online (Sandbox Code Playgroud)

如您所见,这是抛出的socket.timeout错误,那么怎么不捕获呢?经过数小时的互联网研究,我找不到任何有关如何解决此问题的有用信息,对此问题的任何见解将不胜感激。

作为参考,这是socket.py的相关代码块:

 def readinto(self, b):
    """Read up to len(b) bytes into the writable buffer *b* and return
    the number of bytes read.  If the socket is non-blocking and no bytes
    are available, None is returned.

    If *b* is non-empty, a 0 return value indicates that …
Run Code Online (Sandbox Code Playgroud)

python ftp python-3.x socket-timeout-exception

6
推荐指数
1
解决办法
1725
查看次数

JMeter:如何查找java.net.SocketTimeoutException的原因?

我正在为我的 Web 应用程序进行负载测试,并将连接超时和响应超时设置为 20 秒,有时我会遇到如下异常:

非 HTTP 响应代码:java.net.SocketTimeoutException:非 HTTP 响应消息:读取超时

我在 JMeter 测试结果中得到上述异常,并且我的应用程序中没有抛出任何错误,并且没有堆栈跟踪可用于跟踪异常。

我想找出该消息的原因:应用程序是否正在等待处理某些内容,或者 SQL 速度较慢,或者线程挂起,或者应用程序因为已满而拒绝连接?

我怎样才能找到抛出此异常的原因,以及如何修复它?

java testing jmeter load-testing socket-timeout-exception

5
推荐指数
1
解决办法
2万
查看次数

状态服务器关闭了过期的 TCP/IP 连接

我们在 IIS 8.5 服务器上得到 500:服务器错误页面,出现频率不同,错误数量随着流量水平增加和减少。

在调查事件日志后,我们发现以下错误。

状态服务器已关闭过期的 TCP/IP 连接。客户端的 IP 地址为 127.0.0.1。过期的读取操作于 10/11/2015 09:45:50 开始。

(日期时间部分根据发生的时间而有所不同)

在此处输入图片说明

我们尝试通过遵循许多在线推荐的解决方案来纠正问题,但没有什么能真正帮助我们。

ASPNET_State 服务超时,因此与该队列的所有连接都被放弃,因此响应服务器错误页面。

我尝试在 Web 配置中增加sessionState超时,检查是否有任何内存泄漏,因此到目前为止没有任何效果。

该应用程序在 ASP.NET 4.0 经典模式下运行,IIS 版本为 IIS 8.5。

编辑 1

我可以看到队列中的多个请求同时消亡: 在此处输入图片说明

如果您参考图片,他们会同时放弃 10 多个请求!

另外,我可以看到另一个错误:

在状态服务器中处理请求时发生错误。主要调用堆栈:ContinueReading-->ProcessReading-->Tracker::Read。错误代码:0x80072736

但这是非常罕见的!

我感谢专家的任何帮助!非常感谢提前!

更新

我是如何克服这个问题的

将 ViewState 的使用降至几乎为零帮助我解决了这个问题。ASP 状态服务无法处理 X 号 ViewState 查找。所以,尽可能让它无状态。

c# socket-timeout-exception asp.net-mvc-4 windows-server-2012-r2 iis-8.5

5
推荐指数
0
解决办法
5486
查看次数

SocketTimeoutException android改造

我正在我的Android应用程序中使用改造来构建一个宁静的客户端,但是我在尝试从我的webservice中检索数据时遇到异常,第一次调用无异常,但我更改了参数并重试获取新数据我得到了下面提到的例外情况

这是我的服务生成器类

public class ServiceGenerator {

public static final String API_BASE_URL = "http://192.168.43.109:9988/Serv/";

private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();



private static Retrofit.Builder builder =
        new Retrofit.Builder()
                .baseUrl(API_BASE_URL)
                .addConverterFactory(GsonConverterFactory.create());

public static <S> S createService(Class<S> serviceClass) {
    Retrofit retrofit = builder.client(httpClient.build()).build();
    return retrofit.create(serviceClass);
}}
Run Code Online (Sandbox Code Playgroud)

这是我得到的堆栈跟踪:

W/System.err: java.net.SocketTimeoutException
W/System.err:     at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
W/System.err:     at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37)
W/System.err:     at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
W/System.err:     at okio.Okio$2.read(Okio.java:140)
W/System.err:     at okio.AsyncTimeout$2.read(AsyncTimeout.java:238)
W/System.err:     at okio.RealBufferedSource.indexOf(RealBufferedSource.java:325)
W/System.err:     at okio.RealBufferedSource.indexOf(RealBufferedSource.java:314)
W/System.err:     at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:210)
W/System.err:     at okhttp3.internal.http.Http1xStream.readResponse(Http1xStream.java:184)
W/System.err:     at okhttp3.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:125)
W/System.err:     at okhttp3.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:775)
W/System.err: …
Run Code Online (Sandbox Code Playgroud)

android socket-timeout-exception okhttp retrofit2

5
推荐指数
1
解决办法
5306
查看次数

FTPClient SocketTimeoutException 读取超时

我有一个给定的 FTP 服务器。我可以通过 WinSCP 和其他程序连接到服务器。我已经通过 Java 连接到服务器,但过了一段时间我无法连接。根据 WinSCP,我可以一直连接。现在的问题是服务器是问题的原因还是程序的原因。

有我的代码:

private FTPClient ftpClient = null;

public FtpServerConnector() throws Exception {
    ftpClient = new FTPClient();
    ftpClient.connect(url);
    ftpClient.login(username, password);
}

public List<FTPFile> getDirectory(String directoryPath) throws Exception {
    FTPFile[] files = ftpClient.listFiles(directoryPath);
    List<FTPFile> result = new ArrayList<FTPFile>();
    for (FTPFile ftpFile : files) {
        if (ftpFile.getTimestamp().getTime().getTime() >= Long.parseLong("1451606400000")) {
            result.add(ftpFile);
        }
    }
    return result;
}

public static void main(String[] args) {
    try {
        FtpServerConnector ftpServerConnector = new FtpServerConnector();
        List<FTPFile> folders = ftpServerConnector.getDirectory("/");
        for (FTPFile ftpFile …
Run Code Online (Sandbox Code Playgroud)

ftp socket-timeout-exception

5
推荐指数
1
解决办法
4722
查看次数

应用程序进入后台时的sockettimeOutexception

我在应用程序进入后台时设置了一个警报,它工作正常,但在服务内部我有 api,它每隔 5 分钟调用一次以将位置发送到服务器,应用程序进入后台后,服务继续工作,但由于网络我的 api 未被调用并在网络可用时获取 socckettimeOutException。

service android socket-timeout-exception retrofit2

5
推荐指数
1
解决办法
441
查看次数

java.net.SocketTimeoutException:使用 jdbc 连接到 postgresql 时连接超时

我们计划将数据库从 Oracle 切换到 PostgreSQL。创建表后,我将把实际数据加载到 PostgreSQL 表中。为此,我使用 JDBC 连接到数据库。它给了我如下错误。

Connection Failed! Check output console
org.postgresql.util.PSQLException: The connection attempt failed.
        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:275)
        at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
        at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:194)
        at org.postgresql.Driver.makeConnection(Driver.java:450)
        at org.postgresql.Driver.connect(Driver.java:252)
        at java.sql.DriverManager.getConnection(DriverManager.java:664)
        at java.sql.DriverManager.getConnection(DriverManager.java:247)
        at JDBCExample.main(JDBCExample.java:31)
Caused by: java.net.SocketTimeoutException: connect timed out
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at org.postgresql.core.PGStream.<init>(PGStream.java:68)
        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:144)
        ... 7 more
Run Code Online (Sandbox Code Playgroud)

起初我认为数据加载可能需要时间并且可能会导致此类问题,但我使用以下 JDBC 连接 java.util.Connection 进行了测试。它仍然返回与上面相同的错误。

public class JDBCExample {

        public static void main(String[] argv) {

                System.out.println("-------- PostgreSQL "
                                + "JDBC …
Run Code Online (Sandbox Code Playgroud)

postgresql jdbc socket-timeout-exception

5
推荐指数
0
解决办法
7259
查看次数