[英]Java - Sending objects with sockets and using a address besides localhost
所以我開始學習套接字,發現了兩個問題
1。
InetAddress address = InetAddress.getByName("75.73.111.104");
@SuppressWarnings("resource")
Socket socket = new Socket(address, 57823);
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.writeObject("string");
因此,我有該代碼,但是每當我嘗試與其連接時,它都會顯示“ Connection refused: connect
”,但是該代碼在localhost上運行良好,並且端口已轉發,因此出了什么問題。
2。
@SuppressWarnings("resource")
ServerSocket serverSocket = new ServerSocket(57823);
Socket clientSocket = serverSocket.accept();
ObjectOutputStream out = new ObjectOutputStream(clientSocket.getOutputStream());
BufferedInputStream in = new BufferedInputStream(clientSocket.getInputStream());
if(in.toString() != null)
{
System.out.println(in.toString());
}
當我使用該代碼時,它不會打印我先前鍵入的“字符串”,它為我提供了classname@random
數字。 而且它不會將結果視為字符串而是一個對象,因此如何保存已發送的對象?
沖洗輸出流
out.writeObject("string");
out.flush();
在服務器端從流中讀取數據
String data = in.readLine();// read data from stream sent by client
System.out.println(data);
如果使用ObjectOutputStream
進行編寫,則使用ObjectInputStream
進行讀取。
ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());
String data = in.readUTF();// reading String Object
由於您使用ObjectOutputStream
序列化對象,因此您需要使用互補的ObjectInputStream
在另一側反序列化對象。
我認為ObjectInputStream.readObject()
方法應該可以解決問題。
我自己還沒有測試過,但是嘗試一下看看會發生什么:
@SuppressWarnings("resource")
ServerSocket serverSocket = new ServerSocket(57823);
Socket clientSocket = serverSocket.accept();
ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());
System.out.println(in.readObject());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.