我要通过TCP / IP编写程序,我应该通过客户端或服务器发送对象,当我想发送或接收字符串但尝试读取对象时,它是正确的:
private Socket client;
public ThreadedClient(Socket client) {
this.client = client;
}
@Override
public void run() {
try {
ObjectInputStream objIn = new ObjectInputStream(client.getInputStream());
while(true){
try {
Object fromClient = objIn.readObject();
} catch (ClassNotFoundException e) {e.printStackTrace();}
}
} catch (IOException e) {e.printStackTrace();}
}
我收到一个例外:
java.io.StreamCorruptedException: invalid stream header: 306E6165
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at org.bihe.serverSocket.ThreadedClient.run(Server.java:137)
at java.lang.Thread.run(Unknown Source)
它指的是这一行:
ObjectInputStream objIn = new ObjectInputStream(client.getInputStream());
这是我的服务器代码:
ServerSocket ss = new ServerSocket(8800);
while(true){
Socket newClient = ss.accept();
System.out.println(">>>> Client number " + (++counter) + " connected.");
OutputStream outputStream = newClient.getOutputStream();
PrintWriter sender = new PrintWriter(outputStream);
sender.println(true);
sender.flush();
ThreadedClient client = new ThreadedClient(newClient);
clients.add(client);
new Thread(client).start();
客户端代码:
sc = new Socket("127.0.0.1", 8800);
InputStream inputStream = sc.getInputStream();
Scanner scanner = new Scanner(inputStream);
boolean s = scanner.nextBoolean();
if(s){
System.out.println("Client connected successfully.");
return true;
}else{
System.out.println("Ohhh, Some problem happened, try again later!");
}
谁能解释我发生了什么,这个例外是什么,为什么我收到这个例外?
只是摆脱发送和接收布尔值的麻烦。这是多余的。如果在创建连接时遇到问题,则不会创建套接字:而是抛出异常。您会将所有内容与同一套接字上的多个流混淆。不要那样做
在您的读取对象循环中,您需要分别捕获EOFException,并在获取它时关闭套接字并退出循环。如果还有其他IOException,请记录它,关闭套接字,然后退出循环。
我正在尝试用snmp V3实现一个简单的NMS。2 api。目标是通过TCP接收SNMP通知。 问题是我只通过UDP接收通知。。。我用SNMP4J API在java中实现了一个代理,但只有通过UDP发送时才起作用。 我已经搜索了一些示例,但我只找到了代理通过UDP向snmp管理器发送陷阱/通知的示例。。。。 我还发现:http://lists.agentpp.org/pipermail/agent
我在JAVA中通过TCP接收字节数据包时遇到了一些问题。我的TCPServer类发送207字节的数据包。当我发送一个数据包时,控制台中的程序显示“读取207字节的数据包”然后停下来。在下一个数据包继续执行时,显示“多重测量”和“读取1868767867字节数据包”。之后,接收将永远停止。我不知道它为什么接收1868767867字节。我在wireshark中检查它,服务器总是发送207字节。 这是我
我正试图为Android Wear开发一个应用程序。为了在我的Moto 360手表(没有USB端口)上测试我的应用程序: > 我通过USB将手机连接到电脑上。 我打开手机上的Android Wear companion应用程序,启用了“蓝牙调试”。 我打开手表上的开发人员选项,启用了“ADB调试”和“蓝牙调试”。 我打开电脑上的一个终端并发出命令 我点击了Android Studio中的“运行”按
问题内容: 我已经用套接字卡住了4h,我使用的方式是只有一个应用程序作为客户端和服务器,一旦客户端连接, 它将与新客户端一起打开theard,并等待消息。 一旦消息发送到服务器,客户端将收到响应,该部分正在正常工作。 客户专区的一部分: 服务器支持2条消息,第一条是“列表”,发送一条命令是“获取值”。 如果客户端将请求命令“列表”,它将运行以下命令:有一个“服务器/客户端”,它正在发送请求并接收一
这是我的python modbus tcp通信代码,它在这条线路上等待,然后停止连接,这是我的错误: (如果我使用从程序也不工作)在我的客户端,我使用这个代码: 这是主控端:
我在网上搜索了很多,但是没有找到通过套接字发送对象并按原样接收的解决方案。我知道它需要酸洗,我已经做过了。将其转换为字节,然后从另一方面接收。但如何将这些字节转换为该类型的对象。 这是在客户端将对象转换为StringIO并发送到服务器的代码。在服务器端,我得到字节。现在我正在搜索要再次转换为StringIO的字节,以便获得对象值。 在代码中,对象被包装在StringIO中,并通过套接字发送。任何更