마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이 채팅어플 구현 질문드립니다.

0 추천

채팅 어플을 만들고 있는데

진도가 안나가서 질문을 올려봅니다;;

접속 버튼을 눌러서 서버에 접속을 하는걸 
 
자바 콘솔창에서 확인은 가능합니다.
image
그러나 제가 메세지를 입력하여 전송버튼을 누르면
 
클라이언트에서 서버쪽으로 아예 데이터가 전송이 안되는것 같습니다.
 
뭐가 문제인가요??
 
 
아래쪽은 소스입니다
 
 
 
서버(자바)
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	public static void main(String[] args){
		try{
			int portNumber = 5001;
			
			System.out.println("Starting Java Socket Server...");
			ServerSocket aServerSocket = new ServerSocket(portNumber);
			System.out.println("Listening at port " + portNumber + "...");
			
			while(true)
			{
				Socket client = aServerSocket.accept();		//클라이언트의 접속을 기다린다.
				InetAddress clientHost = client.getLocalAddress();
				int clientPort = client.getPort();
				System.out.println("A client connected. host : " + clientHost
						+ ", port : " + clientPort);
				
				ObjectInputStream instream = new ObjectInputStream(client.getInputStream());
				Object obj = instream.readObject();
				System.out.println("Input : " + obj);
				
				ObjectOutputStream outstream = new ObjectOutputStream(client.getOutputStream());
				
				outstream.writeObject(obj);
				System.out.println("Output : " + obj);
				outstream.flush();
				client.close();
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}	
}

클라이언트(안드로이드)

package com.example.project_ca;

import android.support.v7.app.ActionBarActivity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {
	
	public void Popup(){	//경고창
		new AlertDialog.Builder(this)
		.setTitle("오류발생")
		.setMessage("접속여부를 확인해주세요.")
		.setPositiveButton("예", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int sumthin) {
				// TODO Auto-generated method stub
				
			}
		})
		.show();
}
	public static String SERVER_IP = "39.119.227.252";
	public static int SERVER_PORT = 5001;

	Button send_Button, connect_button, exit_button; // 전송, 연결, 종료 버튼
	EditText InputField, NickName; // 메세지 입력창, 닉네임창
	TextView textView; // 메세지 표시창

	String name; // 닉네임
	Socket socket;

	ObjectOutputStream outstream;
	ObjectInputStream instream;
	
	String msg_text;
	
	public static boolean state;		//접속 유무를 확인하기 위한 변수

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		
		InputField = (EditText) findViewById(R.id.inputfield);
		textView = (TextView) findViewById(R.id.view);
		findViewById(R.id.send).setOnClickListener(myButtonClick);
		findViewById(R.id.connect).setOnClickListener(myButtonClick);
		findViewById(R.id.exit).setOnClickListener(myButtonClick);

	}
	Button.OnClickListener myButtonClick = new Button.OnClickListener() {
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.connect:	//접속할 시 state를 true로 바꿔준다.
				state = true;
				ConnectThread thread = new ConnectThread();	//서버와 연결
				thread.start();
				
			case R.id.exit:
				
			case R.id.send:		//전송 버튼 이벤트
				if (state){
					msg_text = InputField.getText().toString();
					try {
						outstream = new ObjectOutputStream(socket.getOutputStream());
						outstream.writeObject(msg_text);
						outstream.flush();
						
						instream = new ObjectInputStream(socket.getInputStream());
						String obj = (String)instream.readObject();
						
						Log.d("MainActivity", "서버에서 받은 메시지 : " + obj);
						
					}catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				else{
					Popup();
				}
			}
		}
	};
	
	class ConnectThread extends Thread {		//서버 연결 클래스
		public void run() {
			try {
				socket = new Socket(SERVER_IP, SERVER_PORT);
				
				outstream = new ObjectOutputStream(socket.getOutputStream());
				outstream.writeObject("Server Connect");
				outstream.flush();
				
				instream = new ObjectInputStream(socket.getInputStream());
				String obj = (String)instream.readObject();
				
				Log.d("MainActivity", "서버에서 받은 메시지 : " + obj);
				socket.close();
			} catch (Exception ex) {
				ex.printStackTrace();
			}

		}
	}
}

 

공대학개론 (200 포인트) 님이 2015년 1월 19일 질문

1개의 답변

0 추천
서버는 어디에 떠 있나요?

서버에 공인 IP 같은게 없으면 몇가지 설정을 해야 접속 가능할 겁니다.
익명사용자 님이 2015년 1월 20일 답변
...