채팅 어플을 만들고 있는데
진도가 안나가서 질문을 올려봅니다;;
접속 버튼을 눌러서 서버에 접속을 하는걸
자바 콘솔창에서 확인은 가능합니다.
그러나 제가 메세지를 입력하여 전송버튼을 누르면
클라이언트에서 서버쪽으로 아예 데이터가 전송이 안되는것 같습니다.
뭐가 문제인가요??
아래쪽은 소스입니다
서버(자바)
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();
}
}
}
}