2011-11-08 73 views
0

我试图编写一个程序,使用具有android手机作为客户端和我的电脑作为服务器我发现和稍微修改代码双方和我的服务器代码工作,但我可以' t得到客户的活动,我不知道如何得到的程序谈话我想基本上能够有任何一方输入文本,并已发送和设置可见其他我知道有多少坚持你们有问题,所以...我如何获得这些沟通?服务器/客户端Android到PC通信问题

客户端代码(仿真器崩溃之前,我甚至可以开始看到这个问题)

package com.example.Socket; 

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.util.Log; 
import android.view.View; 
import android.view.View.*; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import java.io.*; 
import java.net.*; 


public class ClientActivity extends Activity { 

    private EditText serverIp; 

    private Button connectPhones; 

    private String serverIpAddress = ""; 

    private boolean connected = false; 

    private Handler handler = new Handler(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.client); 

     serverIp = (EditText) findViewById(R.id.server_ip); 
     connectPhones = (Button) findViewById(R.id.connect_phones); 
     connectPhones.setOnClickListener((android.view.View.OnClickListener) connectListener); 
    } 

    private OnClickListener connectListener = new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      if (!connected) { 
       serverIpAddress = serverIp.getText().toString(); 
       if (!serverIpAddress.equals("")) { 
        Thread cThread = new Thread(new ClientThread()); 
        cThread.start(); 
       } 
      } 
     } 
    }; 

    public class ClientThread implements Runnable { 

     public void run() { 
      try { 
       InetAddress serverAddr = InetAddress.getByName(serverIpAddress); 
       Log.d("ClientActivity", "C: Connecting..."); 
       Socket socket = new Socket(serverAddr, 9999); 
       connected = true; 
       while (connected) { 
        try { 
         Log.d("ClientActivity", "C: Sending command."); 
         PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket 
            .getOutputStream())), true); 
          // where you issue the commands 
          out.println("Hey Server!"); 
          Log.d("ClientActivity", "C: Sent."); 
        } catch (Exception e) { 
         Log.e("ClientActivity", "S: Error", e); 
        } 
       } 
       socket.close(); 
       Log.d("ClientActivity", "C: Closed."); 
      } catch (Exception e) { 
       Log.e("ClientActivity", "C: Error", e); 
       connected = false; 
      } 
     } 
    } 
} 

服务器代码

import java.io.*; 
import java.net.*; 

/** 
* Simple server using Java Sockets. 
* @author Jonathan Engelsma (http://www.cis.gvsu.edu/~engelsma) 
* 
*/ 
public class Server { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 

    try { 
     // First we create a server socket and bind it to port 9999. 
     ServerSocket myServerSocket = new ServerSocket(9999); 


     // wait for an incoming connection... 
     System.out.println("Server is waiting for an incoming connection on host=" 
       + InetAddress.getLocalHost().getCanonicalHostName() 
       + " port=" + myServerSocket.getLocalPort()); 
     Socket skt = myServerSocket.accept(); 

     // ok, got a connection. Let's use java.io.* niceties to read and write from the connection. 
     BufferedReader myInput = new BufferedReader(new InputStreamReader(skt.getInputStream())); 
     PrintStream myOutput = new PrintStream(skt.getOutputStream()); 

     // attempt to read input from the stream. 
     String buf = myInput.readLine(); 

     // if we got input, print it out and write a message back to the remote client.. 
     if (buf != null) { 
      System.out.println("Server read: [" + buf + "]"); 
      myOutput.print("got it"); 
     } 

     // close the connection. 
     skt.close(); 
     System.out.println("Server is exiting"); 

    } catch (IOException ex) { 
     ex.printStackTrace(); 
     System.out.println("Whoops, something bad happened! I'm outta here."); 
    } 



} 

}

+0

它什么时候崩溃?当你尝试连接时它会崩溃吗?或活动何时启动? – Jbecwar

+0

它说程序被迫关闭错误是从模拟器不是蚀,它似乎是一个运行时错误 –

回答

0

是否使用

<uses-permission android:name="android.permission.INTERNET" /> 

在Android Manifest中?这可能会导致你的问题。

+0

不,它仍然强制关闭应用程序 –

+0

放在您的客户端和服务器的一个断点,然后一步一步你的代码,这应该让你知道哪个调用它正在打破。围绕着一个try/catch。使用套接字,你可以使用catch(UnknownHostException e)和catch(IOException e)。请记住,如果这是在另一个try/catch中,它将默认为外部catch(Exception e),它不会为您提供足够的信息来调试问题。同样使用LogCat,红色语句表明有问题。让我们知道抛出的异常和LogCat输出,并且应该很容易找到问题的原因。 – Dave

+0

并且当然不要选择“run as”选择“debug as”。 ;) – Dave

0

如果您使用的是ICS或JB,那么您可能被禁止在主要活动中打开网络连接。您将收到有关网络权限的不透明错误消息。

我不能重新发布我的答案在这里另一个相当类似的StackOverflow问题(它被认为是由版主发送垃圾邮件),但你可以CHECK IT OUT HERE

我发布了一个功能发送和接收套接字连接器客户端使用asynctask那里。