所以,我在我的客户端写了一个线程,它试图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线程想要关闭套接字时捕获异常.
我对套接字不太熟悉,也许我的方法完全错了.
我试图将(非常大的)序列化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) 我正在使用 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) 我在使用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) 我正在为我的 Web 应用程序进行负载测试,并将连接超时和响应超时设置为 20 秒,有时我会遇到如下异常:
非 HTTP 响应代码:java.net.SocketTimeoutException:非 HTTP 响应消息:读取超时
我在 JMeter 测试结果中得到上述异常,并且我的应用程序中没有抛出任何错误,并且没有堆栈跟踪可用于跟踪异常。
我想找出该消息的原因:应用程序是否正在等待处理某些内容,或者 SQL 速度较慢,或者线程挂起,或者应用程序因为已满而拒绝连接?
我怎样才能找到抛出此异常的原因,以及如何修复它?
我们在 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
我正在我的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) 我有一个给定的 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) 我在应用程序进入后台时设置了一个警报,它工作正常,但在服务内部我有 api,它每隔 5 分钟调用一次以将位置发送到服务器,应用程序进入后台后,服务继续工作,但由于网络我的 api 未被调用并在网络可用时获取 socckettimeOutException。
我们计划将数据库从 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) android ×3
ftp ×2
java ×2
retrofit2 ×2
apache-spark ×1
c# ×1
iis-8.5 ×1
jdbc ×1
jmeter ×1
load-testing ×1
okhttp ×1
postgresql ×1
python ×1
python-3.x ×1
retrofit ×1
scala ×1
service ×1
sockets ×1
testing ×1