안드로이드 개발 질문/답변
(글 수 45,052)
음 얼마전부터 공유기 내부 네트워크에서 socket네트워크를 하고있는데
공유기내부 ip번호로 socket를 보내도 전혀 응답이없네요;;;
에뮬레이터는 현재 PC가 가지고있는 공유기 ip로 보내니 받아지는데
폰에서 넣어서 하니까 전혀 연결이 않되네요 ;;;
퍼미션도 주고 스레드도하고 커넥션도 줬는데;;;
그런데 ping Test를 하니까 ICMP는 pingTest 가 되지않고 ARP로는 테스트가 동작을 하더군요 ;;;
동작형태는
서버 -----------------------공유기---------------안드로이드(클라이언트)
[192.168.0.4] ← [192.168.0.1] ← [192.168.0.2]
1.서버측에서 Socket.accept(); 말고도 다른 연결 대기동작이있나요?
2.클라이언트측에서 socket생성시에 C class대역에 맞는 socket새성이 있나요??
3.ARP방식으로 동작하게 하는방법은 없나요 ?
4. 위에 다 아니라면 어떤게 문제일까요 ㅜㅡㅜ 마켓에 어플은 잘만되드만 ㅜㅡㅜ
socketing방식은 일반적인 serverSocket과 socket방식으로
서버는 무한루프네에서 연결대기하는 상태이고
클라이언트는 스레드를 통해서 연결합니다. 스레드에 들어오면 커넥션을 주는 방식입니다.
-서버
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPserver implements Runnable {
public static final int ServerPort = 9999; // ex: 5555
public static final String ServerIP = "192.168.0.3"; // ex: 192.168.0.100
@Override
public void run() {
// TODO Auto-generated method stub
try{
System.out.println("S: Connecting...");
ServerSocket serverSocket = new ServerSocket(ServerPort);
while (true) {
Socket server = serverSocket.accept();
System.out.println("S: Receiving...");
try {
BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream()));
String str = in.readLine();
System.out.println("S: Received: '" + str + "'");
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(server.getOutputStream())),true);
out.println("Server Received "+ str);
} catch(Exception e) {
System.out.println("S: Error");
e.printStackTrace();
} finally {
server.close();
System.out.println("S: Done.");
}
}
} catch (Exception e) {
System.out.println("S: Error");
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread desktopServerThread = new Thread(new TCPserver());
desktopServerThread.start();
}
}-클라이언트-엑티비티
package android.socketTest;
import android.app.Activity; import android.os.Bundle; //import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast;
public class TCPclienttest extends Activity {
/** Called when the activity is first created. */
public String return_msg;
@Override
public void onCreate(Bundle savedlnstanceState) {
super.onCreate(savedlnstanceState);
setContentView(R.layout.main);
final EditText et = (EditText)findViewById(R.id.EditText01);
Button btn=(Button)findViewById(R.id.Button01);
final TextView tv = (TextView)findViewById(R.id.TextView01);
btn.setOnClickListener(new OnClickListener()
{
public void onClick(View v){
if(et.getText().toString()!=null || !et.getText().toString().equalsIgnoreCase("")){
//Thread cThread = new Thread(new TCPclient(et.getText().toString()));
TCPclient tp = new TCPclient (et.getText().toString(),return_msg);
tp.run();
//cThread.start();
Toast t=Toast.makeText(getApplicationContext(), return_msg, Toast.LENGTH_LONG);
t.show();
tv.setText(return_msg);
}
}});
}
}
-클라이언트-socket 스레드입니다.
package android.socketTest;
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetSocketAddress; import java.net.Socket; import java.net.*;
import android.util.Log;
public class TCPclient implements Runnable {
// private static final String serverIP = "164.125.240.158"; // ex: 192.168.0.100
// private static final int serverPort = 9999; // ex: 5555
private String msg;
private String return_msg;
//private String return_msg;
public TCPclient(String _msg, String rmsg){
this.msg = _msg;
this.return_msg=rmsg;
}
// @Override
public void run() {
// TODO Auto-generated method stub
try {
SocketAddress serverAddr = new InetSocketAddress("192.168.0.3",9999);
Socket socket = new Socket("192.168.0.1");
Log.d("TCP", "C: Connecting...");
socket.connect(serverAddr,5000);
try {
Log.d("TCP", "C: Sending: '" + msg + "'");
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
out.println(msg);
Log.d("TCP", "C: Sent.");
Log.d("TCP", "C: Done.");
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
return_msg = in.readLine();
Log.d("TCP", "C: Server send to me this message -->" + return_msg);
} catch(Exception e) {
Log.e("TCP", "C: Error1", e);
} finally {
socket.close();
}
}
catch(UnknownHostException e){Log.e("TCP", "IPAddr Error&port");}
catch (Exception e) {
Log.e("TCP", "C: Error2", e);
}
}}




안녕 하세요. 살기 힘드네님,
저도 금번에 소켓 통신을 짜고 있는데 똑같은 어려움에 빠졌습니다.
이클립스로는 잘되는데 스마트폰에 넣고 공유기로 메시지를 쏘면 전혀 메시지가 나가지 않는것 같습니다.
서버에서 wireshark으로 봐도 메시지 가 없습니다.
혹시 어떻게 해결 하셨는지 알려 주시면 대단히 감사 하겠습니다.
꼭 답변 부탁 드립니다.
email : sjyoon1@yahoo.com
감사 합니다...