현재 서버를 구현해서 노틉ㄱ에서 서버를 가동하고 갤S 단말기에서 메세지 전송을 하는데
현재 같은 와이파이를 잡을때는 메세지가 잘 전송이 되지만 다른 와이파이(즉 노트북과 단말기가 서로 다른 와이파이를 잡았을때)는 메세지가 전송이 안되서 이렇게 여쭤볼라고 올립니다.
서버 소스
package TCPtest;
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 = 9998; // ex: 5555
public static final String ServerIP = "192.168.0.62"; // 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 client = serverSocket.accept();
System.out.println("S: Receiving...");
try {
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str = in.readLine();
System.out.println("S: Received: '" + str + "'");
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(client.getOutputStream())),true);
out.println("Server Received "+ str);
} catch(Exception e) {
System.out.println("S: Error");
e.printStackTrace();
} finally {
client.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 com.mnk.TCPsocketTest;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.os.IBinder;
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;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;
import android.net.wifi.WifiManager;
public class TCPsocketTest extends Activity {
/** Called when the activity is first created. */
private String return_msg;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
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().equals("")){
TCPclient tp = new TCPclient(et.getText().toString());
tp.run();
Toast t = Toast.makeText(getApplicationContext(), return_msg, Toast.LENGTH_LONG);
t.show();
tv.setText(return_msg);
}
}
});
}
private class TCPclient implements Runnable {
private static final String serverIP = "192.168.0.62"; // ex: 192.168.0.100
private static final int serverPort = 9998; // ex: 5555
private String msg;
//private String return_msg;
public TCPclient(String _msg){
this.msg = _msg;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
InetAddress serverAddr = InetAddress.getByName(serverIP);
Log.d("TCP", "C: Connecting...");
Socket socket = new Socket(serverAddr, serverPort);
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 (Exception e) {
Log.e("TCP", "C: Error2", e);
}
}
}
}
저렇게 소켓으로 구현을 하는 목적은 실시간 전략게임을 만들어야되기 때문에 동기화도 시켜야 되고 메세지가 실시간으로 전송을 하기 위해서 소켓으루 구현을 하려고 합니다.
질문 1 : 다른 와이파이에서 메세지를 전송을 하려면 어떤 부분을 고쳐야 되는지? 아니면 어떤 부분을 추가를 해야 하는지 궁금합니다.
질문 2 : 서버를 구현해서 메세지를 받을때 단말기 3g를 어떤게 구현을 해야 서버로 메세지를 보낼수 있는지 궁금합니다.
한 2주간 책찾아보고 뒤져봐도 어떻게 하는지 잘 몰라서 이렇게 여쭤봅니다.^^




다른 분이 더 좋은 답변을 드릴 거라 생각은 들지만 지나가다 부족한 지식이나마 답글 남겨 봅니다.
문제되는 부분이 어플리케이션의 코드보다는 네트워크에 관련된 문제 같습니다. 코드상에 IP를 적으신 걸로 보아
테스트를 위해 제작한 프로그램이겠지만, IP가 192로 시작한다면 내부 IP가 아닌가요? 다시 말해 AP에서 할당한 IP일 테고 동일 AP에서 할당받은 내부 IP끼리의 통신은 별 문제가 없을테지만, 여기서 벗어난다면 문제가 있지 않을까요?
내부 IP가 아닌 공인IP로 통신을 해보세요.