- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关闭客户端窗口时出错,打开新客户端窗口时服务器终端出现错误。我的英语生疏了:P
关闭客户端时出现服务器错误
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:210)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at main.java.Manager.run(Manager.java:45)
java.io.StreamCorruptedException: invalid stream header: 73720013
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:866)
at java.io.ObjectInputStream.(ObjectInputStream.java:358)
at main.java.controllers.VendedoresUI.load(VendedoresUI.java:69)
at main.java.controllers.VendedoresUI.initialize(VendedoresUI.java:54)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
at main.java.controllers.Controller.loadUI(Controller.java:150)
at main.java.controllers.Controller.changeUI(Controller.java:111)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3470)
at javafx.scene.Scene$ClickGenerator.access$8100(Scene.java:3398)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3766)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
at java.lang.Thread.run(Thread.java:748)
public Server(){}
public void run() {
try{
ServerSocket listener = new ServerSocket(4444);
listener.setSoTimeout(0);
System.out.println("Server is now running");
try {
while (true) {
Socket socket = listener.accept();
new Manager(socket).start();
}
} finally {
listener.close();
}
} catch (IOException ioexception){
System.out.println("\u001B[31mError opening server, more info: ");
System.out.println(ioexception);
System.out.println("Closing server...");
System.exit(0);
}
}
}
public class Manager extends Thread{
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public Manager(Socket socket){
this.socket = socket;
System.out.println("\u001B[32m" + socket.getLocalAddress() + ":" + socket.getPort() + " connected");
}
@Override
public void run() {
try {
out = new PrintWriter(socket.getOutputStream(), true);
out.println("Connected");
while(true) {
ObjectOutputStream objectOutput = new ObjectOutputStream(socket.getOutputStream());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
if(in.readLine().contains(Protocols.VENDEDOR_GET_ALL)) {
ResultSet res = SQLManager.Query("SELECT * FROM vendedores");
List list = new ArrayList();
while (res.next()) {
Vendedor vendedor = new Vendedor();
vendedor.setNOME(res.getString("NOME"));
vendedor.setCPF(res.getString("CPF"));
vendedor.setCONTATO(res.getString("CONTATO"));
vendedor.setCONTA(res.getInt("CONTA"));
vendedor.setBANCO(res.getInt("BANCO"));
vendedor.setAGENCIA(res.getString("AGENCIA"));
vendedor.setCORRENTE(res.getString("CORRENTE"));
list.add(vendedor);
}
objectOutput.writeObject(list);
}
objectOutput.flush();
}
} catch (IOException e) {
System.out.println("\u001B[31m" + socket.getLocalAddress() + ":" + socket.getPort() + " disconnected");
e.printStackTrace();
interrupt();
} catch (SQLException | ClassNotFoundException e) {
Logger.getLogger(Manager.class.getName()).log(Level.SEVERE, null, e);
}
}
}
public class ClientSocket {
private static Socket socket = null;
private static BufferedReader in;
private static PrintWriter out;
public static void load(){
try {
socket = new Socket("127.0.0.1", 4444);
in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
System.out.print(ClientSocket.getIn().readLine());
} catch(IOException ioexception){
Logger.getLogger(ClientSocket.class.getName()).log(Level.SEVERE, null, ioexception);
}
}
public static Socket getSocket() {
return socket;
}
public static BufferedReader getIn() {
return in;
}
public static PrintWriter getOut() {
return out;
}
}
public class VendedoresUI implements Initializable {
@FXML
private TableView table;
@FXML
private TableColumn colName;
@FXML
private TableColumn colCPF;
@FXML
private TableColumn colContato;
@FXML
private TableColumn colConta;
@FXML
private TableColumn colBanco;
@FXML
private TableColumn colAgencia;
@FXML
private TableColumn colCorrente;
ObservableList list;
@Override
public void initialize(URL location, ResourceBundle resources) {
load();
}
private void load(){
try {
if(ClientSocket.getSocket().isClosed()){
ClientSocket.load();
}
PrintWriter escritor = new PrintWriter(ClientSocket.getSocket().getOutputStream(), true);
escritor.println(Protocols.VENDEDOR_GET_ALL);
ObjectInputStream obi = new ObjectInputStream(ClientSocket.getSocket().getInputStream());
List mList = (List) obi.readObject();
list = FXCollections.observableArrayList(mList);
colName.setCellValueFactory(new PropertyValueFactory("NOME"));
colCPF.setCellValueFactory(new PropertyValueFactory("CPF"));
colContato.setCellValueFactory(new PropertyValueFactory("CONTATO"));
colConta.setCellValueFactory(new PropertyValueFactory("CONTA"));
colBanco.setCellValueFactory(new PropertyValueFactory("BANCO"));
colAgencia.setCellValueFactory(new PropertyValueFactory("AGENCIA"));
colCorrente.setCellValueFactory(new PropertyValueFactory("CORRENTE"));
table.setItems(list);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
最佳答案
对于第一个问题:关闭客户端时服务器错误,在关闭客户端之前,通知服务器并允许服务器停止处理。您可能可以忽略此异常,但有条不紊地关闭连接会很好。
在第二个问题上,客户端重新打开时出错(java.io.StreamCorruptedException:无效的流 header ):
调试后发现问题所在。下面的代码显示了问题所在。
复制粘贴并以 Junit 身份运行以查看它。
import org.junit.Test;
import java.io.*;
import java.net.*;
import static java.lang.System.*;
public class ServerSocketTest {
/**
* Runs first to start server. This is the corrected server
*/
@Test
public void startServerTest() throws Exception {
ServerSocket listener = new ServerSocket(4444);
while (true) {
try (Socket socket = listener.accept()) {
new PrintWriter(socket.getOutputStream(), true).println("Connected");
new BufferedReader(new InputStreamReader(socket.getInputStream())).readLine();//read "ALL" from client
new ObjectOutputStream(socket.getOutputStream()).writeObject("String Object");
}
}
}
/**
* Run client Twice to see error
*/
@Test
public void startClientTest() throws Exception {
Socket s = new Socket("127.0.0.1", 4444);
out.println(new BufferedReader(new InputStreamReader(s.getInputStream())).readLine());
new PrintWriter(s.getOutputStream(), true).println("ALL");//tell server we want all the data
out.println(new ObjectInputStream(s.getInputStream()).readObject());
}
/**
* This implementation will error out on second test
*/
@Test
public void errorServerTest() throws Exception {
ServerSocket listener = new ServerSocket(4444);
while (true) {
try (Socket socket = listener.accept()) {
new PrintWriter(socket.getOutputStream(), true).println("Connected");
/*
* Issue is here. The sequence of object construction matters.
* The Constructor has side effects. To correct, move this contructor below InputStreamReader.
* */
ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
new BufferedReader(new InputStreamReader(socket.getInputStream())).readLine();//read "ALL" from client
objectOutputStream.writeObject("String Object");
}
}
}
}
关于java - 如何修复java中的 "java.net.SocketException"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53896017/
我们在 Android 网络请求方面遇到问题,更确切地说是随机接收 SocketException: java.net.SocketException: socket is closed at
我有一个大型 Java 应用程序(用于生成某种类型的报告),其中下面的类用于创建数据源。 import org.apache.log4j.Logger; import org.springfram
.htaccess 中的过滤和 SocketException 之间有联系吗?假设在 .htaccess 中对 host.are.everywhere.in.the.net 进行了拒绝如果我从那个被拒
我正在创建一个示例应用程序 (java),它收集信息并将该信息发送到 .net 中内置的 Web 服务。通常它工作正常。两个平台都在完美沟通。 但经过一段时间后,我收到了 (java.net.Sock
java.net.SocketException: Connection reset 之间有什么区别?和 java.net.SocketException: Broken Pipe? 我想弄清楚这两个
我正在使用strapi.io 开源 Node.js headless CMS 这是我的注册页面代码 无效_registerUser()异步{ http.Response response =
这个问题在这里已经有了答案: Official reasons for "Software caused connection abort: socket write error" (14 个答案)
我看过别处,每个网站都告诉我这实际上是互联网连接错误......但我知道这不可能是正确的。 我正在使用 Flutter (dart) 为 iOS(在 Mac 上)编程。我在 iOS 模拟器和实际的 i
我正在尝试使用我的智能手机(不是模拟器)连接到我的带有 SignalR 后端的 Aspnet Core。我将 Cors 添加到 Startup.cs: public void ConfigureSer
如何阻止 SocketException 的发生? 我正在尝试将序列化对象从客户端简单传输到本地计算机上的服务器。 我已经能够使用以下代码的细微变化来发送字符串,但是当我尝试发送对象时 Custome
我正在尝试 Dart,我已经为此苦苦挣扎了很久。来电: runServer() { HttpServer.bind(InternetAddress.ANY_IP_V4, 8080) .then
我开发了一个小型 GUI 应用程序,用于从远程服务器下载日志文件。如果我从 Netbeans IDE 7.2 中启动该应用程序,则它可以正常工作(没有连接问题) 但是如果我将其作为独立的 jar 文件
我有客户端类和服务器类,但是当我运行两个主要方法时,什么都不会发生,当我停止运行时,会发生此异常。为什么??请帮助我,我该如何解决它??? 我的客户端类: public class Client {
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.
我创建了一个接受 TCP 连接的服务器。连接到套接字后,它循环从输入流读取数据。 步骤: 我启动了我的服务器。 启动客户端。 现在我要关闭客户端。 然后服务器给我 SocketException Co
我有一个 java 应用程序在 centos 6.3 和 tomcat 7 作为应用程序容器上运行,目前遇到一个错误:java.io.socketexception 达到数据报套接字的最大数量 我们使
我正在使用 C# UdpClient 类连接到 UDP 网络。有一个 UdpClient 对象,绑定(bind)到一个固定的本地端口,但不绑定(bind)到任何远程端点,因为它需要能够向/从多个不同的
我想知道是否有一种方法可以避免在我无法连接时获取 SocketException 而不是使用 try/catch 捕获 SocketException。 我有这段代码可以检查服务器是否可用: publ
我决定看看网络消息传递等,我的第一个调用端口是 UDP。 我遇到的问题是当我尝试发送消息时。我正在尝试在特定端口上访问 IP,但应用程序错误并出现错误 “SocketException 一个现有的连接
我有一个 Java 服务器/客户端应用程序,它使用 while 循环允许客户端输入直到断开连接。这是在扩展 Thread 并使用 run() 方法的 ClientHandler 类对象中完成的,因此每
我是一名优秀的程序员,十分优秀!