2015-04-02 38 views
0

我想通過套接字發送一個字符串數組的內容,然後在另一端打印數組項。使用ObjectInputStream通過套接字發送數組

我一直在嘗試使用ObjectInputStream,但沒有運氣。如果我說實話我已經在網上搜索,但我仍然不知道自己在做什麼。

客戶

把物品放入數組

String[] sendServer = new String [4]; 

{ 
    sendServer[0] = txtUsername.getText(); 
    sendServer[1] = dateFormat.format(date); 
    sendServer[2] = txtMessageOut.getText(); 
    sendServer[3] = "I HOPE THIS WORKS!!!"; 
} 

插口在另外的方法被創造,我可以出來,只是不能確定這是否正確?

ObjectOutputStream objectStream = new ObjectOutputStream(clientSocket.getOutputStream()); 
objectStream.writeObject(sendServer); 

System.out.println(sendServer[0]); 
System.out.println(sendServer[1]); 
System.out.println(sendServer[2]); 

而對於服務器我不知道。我一直在嘗試與ObjectInputStream沒有運氣。服務器上的套接字名爲socket

任何幫助或指針將不勝感激。

+0

'不走運' 是沒有問題的描述。 – EJP 2015-04-03 00:10:07

+0

@Aify downvote是不回答這個問題。 – EJP 2015-04-03 03:01:21

回答

0

我想給你一個代碼片段。發件人和reveiver使用套接字進行通信。將Request替換爲您的數據結構,並消除不需要的代碼行。

這是發件人:

private Response doUnicastTCP(Server remoteServer, Request request) throws ServerException { 
       Socket clientSocket = null; 
       ObjectOutputStream outToServer = null; 
       ObjectInputStream inFromServer = null; 
       try { 
        if (isStarted()) { 
         request.setRequestType(RequestType.UNICAST_TCP); 
         // LOGGER.debug("Sending " + request.getRequestType() + " " 
         // + request); 
         clientSocket = new Socket(remoteServer.getHost(), remoteServer.getUnicastTCPPort()); 
         clientSocket.setSoTimeout(request.getTimeout()); 
         outToServer = new ObjectOutputStream(clientSocket.getOutputStream()); 
         inFromServer = new ObjectInputStream(clientSocket.getInputStream()); 
         outToServer.writeObject(request); 
         Response response = (Response) inFromServer.readObject(); 
         // LOGGER.debug("Received " + request.getRequestType() + " " 
         // + response); 
         if (response.getReturnValue() instanceof Exception) { 
          throw new ServerException((Exception) response.getReturnValue()); 
         } 
         return response; 
        } else { 
         throw new ServerNotStartedException(); 
        } 
       } catch (SocketTimeoutException e) { 
        throw new ServerException("cant execute request " + request + " on server " + remoteServer + " " 
          + e.toString()); 
       } catch (ClassNotFoundException | IOException e) { 
        throw new ServerException("cant execute request " + request + " on server " + remoteServer + " " 
          + e.toString()); 
       } finally { 
        try { 
         if (clientSocket != null) { 
          clientSocket.close(); 
         } 
        } catch (IOException e) { // 
         LOGGER.trace("socket couldn't be closed"); 
        } 
       } 
      } 

這是接收器:

public void run() { 
      Request r = null; 
      try { 
       ObjectInputStream inFromClient = new ObjectInputStream(s.getInputStream()); 
       ObjectOutputStream outToClient = new ObjectOutputStream(s.getOutputStream()); 
       while (isStarted()) { 
        final Object receivedObject = inFromClient.readObject(); 
        // LOGGER.debug("Receiving " 
        // + ((Request) receivedObject).getRequestType() + " " 
        // + receivedObject); 
        r = (Request) receivedObject; 
        processId.set(r.getProcessId()); 
        Response rs = new Response(); 
        rs.setRequest(r); 
        rs.setServerFrom(GoldenNodeServer.this); 
        if (getOperationBase() != null) { 
         try { 
          Object s = ReflectionUtils.callMethod(getOperationBase(), r.getMethod(), r.getParams()); 
          rs.setReturnValue(s); 
         } catch (Exception e) { 
          rs.setReturnValue(e); 
         } 
         outToClient.writeObject(rs); 
        } else { 
         rs.setReturnValue(new NoClientProxySetException()); 
        } 
       } 
      } catch (EOFException e) { 
       // LOGGER.trace("eof occured"); 
      } catch (SocketException e) { 
       if (e.toString().contains("Socket closed") || e.toString().contains("Connection reset") 
         || e.toString().contains("Broken pipe")) { 
       } else { 
        stop(); 
        LOGGER.error("Error occured" + (r == null ? "" : " while processing " + r) + " ", e.toString()); 
       } 
      } catch (IOException | ClassNotFoundException e) { 
       stop(); 
       LOGGER.error("Error occured" + (r == null ? "" : " while processing " + r) + " ", e.toString()); 
      } finally { 
       tcpProcessors.remove(this); 
      } 
     }