현제 네트워킹 상황이  기숙사 네트워크 랜선에 내 개인 공유기를 꽂아서 무선네트워크 망을 만듦

 

외부ip : 192.168.0.14 (기숙사 인터넷(공유기환경))

내부ip : 192.168.1.2 (pc ip)

기본 게이트웨이  : 192.168.1.1

 

이런상황에서 스마트폰으로 이 네트워크 망에 접속해서 ip를

192.168.1.3 을 받았습니다.

 

이런 상황에서 pc(java)로 포트를 1234로 하는 서버를 열었습니다.

->ServerSocket serversocket = new ServerSocket(1234); // 이런식으로 ( 컴퓨터 내에서 java 파일 client로 서버가 동작하는지는 이미 확인함 )

 

여기서 스마트 폰으로 위 서버에 접속하려고하는데, 소켓생성이 계속 실패를 하네요;

 

일반 같은 내부 망 안에 있기 때문에, pc의 ip로 접속을하고 port는 1234로 접속을 하는데요(

public Socket client = null;

private String ip="192.168.1.2";
private int port = 1234;
 

client = new Socket(ip,port);

 

대략 이런식,  안드로이드 app도 java의 소켓접속방법과 매우 유사하다고 해서 거의 똑같이 구현하고

onStop()을 override해서 소켓을 닫아주고 있습니다.

 

소켓생성이 계속 실패해서 소켓이 null이 반환되고 있습니다.

제가 접근하는 방식이 잘못된건가요 ㅠㅠ? 알고있는 짧은 네트웤 지식으로는 맞다고 생각되는데, 공유기 설정이 더 필요한건지, ip나 포트를 잘못 설정한건지,

 

도와주세요 네트웤 고수님들.

 

android src file :

 

package com.example.androidjavaclient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
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 Main extends Activity implements OnClickListener{
 
 public TextView tv = null;
 public Button btn = null,btn2 = null;
 public EditText et = null,iptext = null;

 public Socket client = null;
 private String msg ="";
 private BufferedReader br = null;
 private PrintWriter pw = null;
 private String ip="192.168.1.2";
 private int port = 1234;
 
 @Override
 public void onStop() {
  super.onStop();
  try{
   client.close();
  } catch(IOException e) {
   e.printStackTrace();
  }
 }
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.index);
        init();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.index, menu);
        return true;
    }

    public void init() {
     
     btn = (Button)findViewById(R.id.button);
     btn.setOnClickListener(this);
     btn2 = (Button)findViewById(R.id.Connect);
     btn2.setOnClickListener(this);
     
     
     tv = (TextView)findViewById(R.id.textView);
     
     iptext = (EditText)findViewById(R.id.ipText);
     et = (EditText)findViewById(R.id.editText);
     
     try{
      client = new Socket(ip,port);
     } catch(IOException e) {
      Toast.makeText(getApplicationContext(), "Fail Connection "+ip+"/"+port+".", Toast.LENGTH_LONG).show();
      e.printStackTrace();
     }
    }
    //------------------이하로는 안보셔도 됨 ---------------------------------//
    public void onClick(View v) {
     int act = v.getId();
     
     if(act == btn.getId()) {
      if(et.getText() != null || !et.getText().toString().equals("")) {
       try {
        Connection();
        if(client.isConnected()) {
        br = new BufferedReader(new InputStreamReader(client.getInputStream()));
        pw = new PrintWriter(client.getOutputStream(),true);
        
        msg = et.getText().toString();
        
        pw.println(msg);
        String reading = br.readLine();
        tv.append("\n"+reading);
        } else {
         tv.append("Fail..");
        }
       } catch(IOException e) {
        e.printStackTrace();
       }
      } else {
          Toast.makeText(getApplicationContext(), "Make a Message plz", Toast.LENGTH_LONG).show();
         }
     }
     if(act == btn2.getId()) {
      ip = iptext.getText().toString();
      if(ip.equals("") || ip == null) {
       Toast.makeText(getApplicationContext(), "ip : " + ip, Toast.LENGTH_LONG).show();
      }
     }
    }
   
    public void Connection(){
     
     if(client.isConnected()) {
      Toast.makeText(getApplicationContext(), "Success Connection "+ip+"/"+port+".", Toast.LENGTH_LONG).show();
     } else {
      Toast.makeText(getApplicationContext(), "Fail to make connection", Toast.LENGTH_LONG).show();
       }
      
    }
}

 

server file :

 

package server;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;

public class ThreadServer implements Runnable {
 
 private static final int ServerPort = 1234;
 String str;
 
 @Override
 public void run(){
  BufferedReader in = null;
  PrintWriter out = null;
  
  try{
   System.out.println("S : Connecting...");
   ServerSocket serversocket = new ServerSocket(ServerPort);
   Socket client = serversocket.accept();
    System.out.println("S : Recieving...");
    try {
     while (true)
     {
      System.out.println("서버: "+client.getInetAddress()+" 클라이언트의 새로운 메세지를 기다리고 있습니다.");

      //서버에서 클라이언트의 메세지를 받기위해 스트림을 구성
      in = new BufferedReader
        (new InputStreamReader(client.getInputStream()));
      out = new PrintWriter
        ( new OutputStreamWriter ( client.getOutputStream()),true);
      String reading=in.readLine(); //클라이언트에게서 받은 메세지를 읽어들임
      System.out.println("서버(수신): "+reading);
      out.println(reading); //서버에서 클라이언트로 받은 메세지 보냄
      System.out.println("서버(송신): "+reading);

      //입력값이 없으면 연결을 끊음
      if (reading==null)
      {
       System.out.println("서버: "+client.getInetAddress()+" 클라이언트로부터 입력값이 없어 연결을 끊습니다.");
       System.exit(1);
      }
     }//while
     
    }catch (SocketException e) {
     System.out.println("S : ERROR!");
     e.printStackTrace();
     in.close();
     out.close();
     client.close();
     serversocket.close();
    }

    
    System.out.println("서버: "+client.getInetAddress()+" 클라이언트와의 연결이 끊어졌습니다.");
    
  }catch(IOException e){
   e.printStackTrace();
  }
 }
 
 
 public static void main(String [] args) {
  Thread PCServerThread = new Thread(new ThreadServer());
  PCServerThread.start();
 }

}