2011-11-08 17 views
0

私はAndroidの携帯電話をクライアントとして使用し、私のPCをサーバとして見つけ、両側とサーバコードが少しずつ変更されたプログラムを作成しようとしていますが、 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; 
      } 
     } 
    } 
} 

Serverコード

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マニフェストでは?それはあなたの問題を引き起こす可能性があります。

+0

いいえそれはまだアプリケーションを強制的に閉じた –

+0

あなたのクライアントのピースとサーバーの両方のピースにブレークポイントを入れてからステップスルーあなたのコード、これはあなたがそれが壊れている呼び出しを知らせる必要があります。トライ/キャッチでサラウンド。ソケットを使用すると、catch(UnknownHostException e)とcatch(IOException e)を使用できます。ただし、これが別のtry/catch内にある場合は、問題をデバッグするのに十分な情報を提供しない外部キャッチ(Exception e)がデフォルトになります。 LogCatも使用してください。赤い文は問題を示しています。発生した例外とLogCatの出力をお知らせください。問題の原因を簡単に見つけることができます。 – Dave

+0

もちろん「実行する」を選択しないで「デバッグ」を選択してください。 ;) – Dave

0

ICSまたはJBを使用している場合は、メインアクティビティ内からネットワーク接続を開くことが制限されている可能性があります。ネットワークのアクセス許可に関する不透明なエラーメッセージが表示されます。

私はここで別の非常によく似たStackOverflow質問への私の答えを再投稿できません(それは司会者によってスパムとみなされます)が、CHECK IT OUT HEREです。

私はそこでasynctaskを使用して機能的な送受信ソケットコネクタクライアントを投稿しました。

関連する問題