2016-04-26 77 views
0

我正在写一个客户端 - 服务器对,其中服务器是在Linux上运行的Java TCP服务器和客户端是Android Studio中开发的Android应用程序。发送通过套接字的Java TCP服务器对象Android应用

我已经成功地做了一个客户端 - 服务器对发送Message对象给对方,但是当我尝试在我的Android应用什么来实现类似的功能似乎发生。

的Android应用作品,而只是发送StringsBufferedReaderPrintwriterreadLine()println()方法,但不能从ObjectOutput/InputStreamreadObject()writeObject()

也试过writeUnshared()/readUnshared()方法没有运气。

//Message.java 
package Message; 
import java.io.*; 

public class Message implements Serializable { 
    String msg; 
    String tag; 
    String username; 

    private static final long serialVersionUID = 4L; 
     // Methods. 
    } 

    // Reading MessageObjects in Server.java. 
    @Override 
    public void run() { 
     Message message = null; 
     try { 
      while ((message = (Message)reader.readObject()) != null) { 
       // Processing message. 
      } 
     } 
    } 

    // Sending Message Objects in android App. 
    public void onClick(View v) { 
     if(!msgBox.getText().toString().equals("")) { 
      final String msg; 
      try { 
       msg = msgBox.getText().toString(); 
       writer.writeObject(new Message(msg, CLIENT, username)); 
       msgBox.setText(""); 
       writer.flush(); 
       // Updating ui etc. 
      } 
      catch (IOException e) { 
       e.printStackTrace(); 
      } 
      textBox.smoothScrollBy(textBox.getMaxScrollAmount(), 100); 
     } 
    } 

    // Connection-method in android app, initalizes streams. 
    private boolean connect(String username, String address, int port) { 
     boolean connected = false; 
     try { 
      server = new Socket(address, port); 
      InputStreamReader(server.getInputStream()); 
      reader = new ObjectInputStream(server.getInputStream()); 
      writer = new ObjectOutputStream(server.getOutputStream()); 
      writer.writeObject(new Message("!newUser",AUTOMATED,username)); 
      writer.flush(); 
      connected = true; 
      System.out.println("Connected!"); 
     } 
     catch (Exception ex) { 
      ex.printStackTrace(); 
      System.out.println("Cannot Connect!"); 
      connected = false; 
      // UI-things. 
     } 
     if(connected){ 
      // Thread that listens for replies. 
      listenThread(); 
     } 
     return connected; 
    } 
+0

在哪里,这些所谓的'ObjectInput'和'ObjectOutput'流声明并初始化?我不认为你真的向我们展示了完整的问题 – 3kings

+0

我认为服务器工作正常,因为我得到它与命令行客户端一起工作。从Android应用程序添加连接方法 – Jokke

+0

因此,一切看起来不错...从我可以告诉。你没有在主线程上做任何正确的网络连接? – 3kings

回答

0
  • 您需要创建ObjectInputStreamObjectOutputStream,两端。否则,你可能会陷入僵局。
  • 你读循环不正确。 readObject()在流结束时不返回null,因此将null用作循环条件没有任何意义。它可以在您发送空值时返回null。当捕获到EOFException时,循环应该终止。
相关问题