gpt4 book ai didi

java - java中writeobject和String的错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:45:00 27 4
gpt4 key购买 nike

我有一个客户端和服务器,我在它们之间交换消息和对象。
我的问题是当我借助 toString 和字符串一起发送对象时。如何从字符串中挑选出对象并将其添加到列表中;我写了代码。

服务器代码:

import java.net.*;
import java.util.ArrayList;
import java.io.*;

public class Server {

public static void main(String[] args) {
ArrayList <PhoneBook> listPhone=new ArrayList<PhoneBook>();

PhoneBook a = new PhoneBook("a","a","","",1);
listPhone.add(a);
PhoneBook pB = new PhoneBook();
String ob;
try{

ServerSocket server = new ServerSocket(5555,50);

System.out.println("Waiting Incoming Connection...");
System.out.println("Local Address :"+server.getInetAddress()+" Port :"+server.getLocalPort());
Socket sock = server.accept();

ObjectOutputStream out =new ObjectOutputStream(sock.getOutputStream());
ObjectInputStream in =new ObjectInputStream(sock.getInputStream());

String strin =(String) in.readObject();

if (strin.equals("START")){
out.writeObject("WAITING");
out.flush();}
strin =(String) in.readObject();
String[] str=strin.split("\n");
if(str[0].equals("REQUEST_SEARCH")){

try{
// in this line is error
pB = (PhoneBook)in.readObject(); //String cannot be cast to PhoneBook
out.flush();
}catch(ClassNotFoundException classnot){
System.err.println("Data received in unknown format");}
out.writeObject("RECORSDS");
out.flush();
String sName = pB.getsurName();
for(int i=0;i<listPhone.size();i++)
if(listPhone.get(i).getsurName().equals(sName)){
out.writeObject(pB.toString());
out.flush();

}else{
out.writeObject("NXRECORD");
out.flush();
}}
strin =(String) in.readObject();
String[] st=strin.split("\n");

if(st[0].equals("REQUEST_INSERT")){

listPhone.add(pB);
System.out.println("The contact is add");
out.writeObject("OK");
out.flush();
}
out.flush();

if(strin.equals("END")){ //bye = terminate the conversation

in.close();
out.close();
sock.close();
System.out.println("Connection Closing...");}
}
catch (Exception ex){
System.out.println("Error during I/O");
ex.getMessage();
ex.printStackTrace();
} } }

客户端代码:

     if (strin.equals("WAITING")) {
System.out.println("The server says: " + strin);
// out.writeObject("REQUEST_SEARCH\n");
// out.flush();
System.out.println("The server says: " + strin);
System.out.print("Write the contact elements ");
System.out.print("Write the name: ");
String name = input.nextLine();
System.out.print("Write the surname: ");
String surName = input.nextLine();
System.out.print("Write the job: ");
String job = input.nextLine();
System.out.print("Write the street: ");
String street = input.nextLine();
System.out.print("Write the phone number: ");
int number = input.nextInt();
PhoneBook p = new PhoneBook(name, surName, job, street, number);
out.writeObject("REQUEST_SEARCH\n" + p.toString());
out.flush();
}

错误:

Connection reset
at java.net.SocketInputStream.read(Unknown Source) at
java.net.SocketInputStream.read(Unknown Source) at
java.net.SocketInputStream.read(Unknown Source) at
java.io.ObjectInputStream$PeekInputStream.peek(Unknown Source) at
java.io.ObjectInputStream$BlockDataInputStream.peek(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source) at
java.io.ObjectInputStream.readObject0(Unknown Source) at
java.io.ObjectInputStream.readObject(Unknown Source) at Server.main

应用背景:

这个程序是一个带有联系人(服务器)的PhooneBook,客户端首先发送一个START,服务器接受它并在客户端创建一个对象电话簿(其中包括姓名,工作,街道和电话)并发送消息REQUEST_SEARCH后发送WAITING,服务器获取消息和对象(联系人)并在数组列表中搜索<​​em>姓氏是否存在联系人,如果存在则发送回对象并显示姓名,作业和其他使用toString()和消息RECORDS,然后客户端发送OK,服务器发回END,连接正在关闭,如果联系人不存在,服务器发送消息NXRECORD,客户端发回消息REQUEST_INSERT,服务器接受它并将对象添加到arraylist中并发送OK,客户端发回END并关闭连接。

最佳答案

我不知道您在此行之后要向服务器发送什么内容。

out.writeObject("REQUEST_SEARCH\n" + p.toString());

但我假设您正在向 Server 发送一个 String 。而在服务器端检索它时,您可以使用以下行将其类型转换为 PhoneBook 而不是 String:

pB = (PhoneBook)in.readObject();

这会导致流不匹配。因此会出现异常。
此问题的解决方案如下:我假设您的 PhoneBook 类是 Serialized

在客户端使用:

 out.writeObject("REQUEST_SEARCH\n" + p.toString());
out.writeObject(p);//Given that PhoneBook is Serializable.

关于java - java中writeobject和String的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15454251/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com