2011-11-08 3 views
0

안드로이드 전화 클라이언트 및 PC로 서버를 사용하여 소켓을 사용하여 프로그램을 작성하려고 노력 중이며 양면 코드와 약간 수정 된 코드가 있지만, t 클라이언트 활동을 얻고 나는 acutally 말하는 프로그램을 얻는 방법을 모른다. 나는 기본적으로 양면 입력 텍스트를 가질 수 있고 그것을 보내고 다른 사람에게 보이도록 설정하고 싶다. 얼마나 많은 양의 stickler가 있는지 알고있다. 너희들은 질문을하기 위해 ... 어떻게 의사 소통을 할 수 있니?서버/클라이언트 안드로이드 PC 통신 문제

클라이언트 코드 서버 코드

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

에게

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; 
      } 
     } 
    } 
} 

(심지어 문제를보고 시작하기 전에 에뮬레이터 충돌) 당신이 사용하고

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

안드로이드 매니페스트에서? 그건 당신 문제를 일으킬 수 있습니다.

+0

아니요. 여전히 응용 프로그램을 강제 종료했습니다. –

+0

클라이언트 조각과 서버 조각 모두에 중단 점을 넣은 다음 단계별로 실행하십시오. 귀하의 코드, 이것은 어떤 전화가 끊어지고 있는지 알려야합니다. try/catch로 서라운드. 소켓을 사용하면 catch (UnknownHostException e) 및 catch (IOException e)를 사용할 수 있습니다. 비록 이것이 다른 try/catch 안에 있다면, 문제를 디버그하기에 충분한 정보를주지 않는 외부 캐치 (Exception e)가 기본값이 될 것입니다. LogCat을 사용하면 빨간색 문이 문제를 나타냅니다. 발생한 예외와 LogCat 결과를 알려 주시면 문제의 원인을 쉽게 찾을 수 있습니다. – Dave

+0

물론 "run as"를 선택하지 말고 "debug as as"를 선택하십시오. ;) – Dave

0

ICS 또는 JB를 사용하는 경우 주 활동 내에서 네트워크 연결을 열 수 없습니다. 네트워크 사용 권한과 관련하여 불투명 한 오류 메시지가 표시됩니다.

다른 꽤 유사한 StackOverflow 질문에 답할 수 없습니다. (중재자가 스팸으로 간주합니다.)하지만 CHECK IT OUT HERE 수 있습니다.

나는 거기에 asynctask를 사용하여 기능적으로 보내고받는 소켓 커넥터 클라이언트를 게시했습니다.