好的,我正在開發一個程序,用於保存向量中多個文件的名稱和路徑,並將這些文件從服務器發送到客戶端。所以我只是試圖用一個文件的單個條目發送一個單一的矢量,但無濟於事。客戶端代碼中的向量初始化似乎有點奇怪,使用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