好的,我正在开发一个程序,用于保存向量中多个文件的名称和路径,并将这些文件从服务器发送到客户端。所以我只是试图用一个文件的单个条目发送一个单一的矢量,但无济于事。客户端代码中的向量初始化似乎有点奇怪,使用ObjectInput和ObjectOutput接口发送向量是不正确的?或者我只是做错了吗? Server代码:通过TCP发送矢量 - 是使用ObjectOutput完成的吗?
import java.io.*;
import java.net.*;
import java.util.*;
class TCPServer
{
public static void main(String argv[]) throws Exception
{
String clientSentence;
ServerSocket welcomeSocket = new ServerSocket(6789);
Vector<String> name = new Vector<String>(3, 1);
File f0=new File("C:/Downloads","hjd");
name.addElement(f0.getName());
while(true)
{
Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient =
new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
if(clientSentence!="hjd")
outToClient.writeBytes("Please enter correct directory/filename");
else{
OutputStream socketStream = connectionSocket.getOutputStream();//output stream where the object is to be written
ObjectOutput objectOutput = new ObjectOutputStream(socketStream);
objectOutput.writeObject(name);//no error during compilation of this line however
}
}
}
而这给了我发现误差向量中的声明行不兼容类型的客户端代码:
import java.io.*;
import java.net.*;
import java.util.*;
class TCPClient
{
public static void main(String argv[]) throws Exception
{
String sentence;
System.out.println("Enter name of file as hjd");//I will later expand this to add more options
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("localhost", 6789);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + '\n');
InputStream socketStream = clientSocket.getInputStream();
ObjectInputStream objectInput = new ObjectInputStream(socketStream);
Vector<String> name = objectInput.readObject();//This is the line I am recieving an error on,saying "incompatible types found"
System.out.println("The name of file is:"+name.get(0));
clientSocket.close();
}
}
汇总,我可以给使用这些接口的载体?如果不是,那么我如何通过TCP发送一个向量?如果是的话,错误线路的正确声明是什么,因为这个线路甚至没有提到的矢量的大小或增量?
编辑 - 现在感谢ALex,错误消失了。我已编辑的声明像这样:
if(objectInput.readObject() instanceof String){
String a=(String)objectInput.readObject();
System.out.println("The name of file is:"+a);
}else if(objectInput.readObject() instanceof Vector){
Vector<String> name=(Vector<String>)objectInput.readObject();
System.out.println("The name of file is:"+name.get(0)); }
,但会产生话说例外的程序运行,而我的ObjectInputStream已损坏。我错过了什么?
您的代码看起来不错。您是否在客户端和服务器上运行不同版本的Java? – Alex
@Alex Nope,实际上在同一个系统上运行它们,所以我不认为这是可能的。那么你能告诉我如何在客户端代码中声明Vector名称的大小和大小吗? – rednblue
如果您收到异常,则应编辑问题以包含完整的堆栈跟踪。 – Alex