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

안드로이드 클라이언트 접속문제..n

0 추천
안드로이드 클라이언트 소스입니다.
C#서버와 연결하는데 서버는 정상작동확인되었는데 클라이언트쪽이
접속자체가 안되네요.ㅜㅜ 문제좀있는거 보이면 답글좀 ㅜ
IP주소는 일부러 감췄습니다.
 
package com.example.textviewtest;
 
import java.io.*;
import java.net.*;
 
import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
 
public class MainActivity extends Activity {
 
/** Called when the activity is first created. */
public Socket cSocket = null;
private String server = "210.***.**.***"; // 서버 ip주소
private int port = 10701;// 포트번호
 
public PrintWriter streamOut = null;
public BufferedReader streamIn = null;
 
public chatThread cThread = null;
 
public TextView tv;
public EditText nickText;
public EditText msgText;
public ScrollView sv;
 
public String nickName;
 
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
 
sv = (ScrollView) findViewById(R.id.scrollView1);
tv = (TextView) findViewById(R.id.text01);
nickText = (EditText) findViewById(R.id.connText);
msgText = (EditText) findViewById(R.id.chatText);
 
logger("채팅을 시작합니다.");
}
 
public void onDestroy() { // 앱이 소멸되면
super.onDestroy();
if (cSocket != null) {
sendMessage("# [" + nickName + "]님이 나가셨습니다.");
}
}
 
public void connBtnClick(View v) {
switch (v.getId()) {
case R.id.connBtn: // 접속버튼
if (cSocket == null) {
nickName = nickText.getText().toString();
logger("접속중입니다...");
connect(server, port, nickName);
}
break;
case R.id.closeBtn: // 나가기 버튼
if (cSocket != null) {
sendMessage("# [" + nickName + "]님이 나가셨습니다.");
}
break;
case R.id.sendBtn: // 메세지 보내기 버튼
if (cSocket != null) {
String msgString = msgText.getText().toString();
if (msgString != null && !"".equals(msgString)) {
sendMessage("[" + nickName + "] " + msgString);
msgText.setText("");
}
} else {
logger("접속을 먼저 해주세요.");
}
break;
}
}
 
public void connect(String server, int port, String user) {
try {
cSocket = new Socket(server, port);
streamOut = new PrintWriter(cSocket.getOutputStream(), true); // 출력용
// 스트림
streamIn = new BufferedReader(new InputStreamReader(
cSocket.getInputStream())); // 입력용 스트림
 
sendMessage("# 새로운 이용자[" + user + "]님이 들어왔습니다.");
 
cThread = new chatThread();
cThread.start();
} catch (Exception ex) {
logger("접속이 제대로 이루어 지지 않았습니다.");
}
}
 
private void logger(String MSG) {
tv.append(MSG + "\n"); // 텍스트뷰에 메세지를 더해줍니다.
sv.fullScroll(ScrollView.FOCUS_DOWN); // 스크롤뷰의 스크롤을 내려줍니다.
}
 
private void sendMessage(String MSG) {
try {
streamOut.println(MSG); // 서버에 메세지를 보내줍니다.
} catch (Exception ex) {
logger(ex.toString());
}
 
}
 
Handler mHandler = new Handler() { // 스레드에서 메세지를 받을 핸들러.
public void handleMessage(Message msg) {
switch (msg.what) {
case 0: // 채팅 메세지를 받아온다.
logger(msg.obj.toString());
break;
case 1: // 소켓접속을 끊는다.
try {
cSocket.close();
cSocket = null;
 
logger("접속이 끊어졌습니다.");
 
} catch (Exception e) {
logger("접속이 이미 끊겨 있습니다." + e.getMessage());
finish();
}
break;
}
}
};
 
class chatThread extends Thread {
private boolean flag = false; // 스레드 유지(종료)용 플래그
 
public void run() {
try {
while (!flag) { // 플래그가 false일경우에 루프
String msgs;
Message msg = new Message();
msg.what = 0;
msgs = streamIn.readLine(); // 서버에서 올 메세지를 기다린다.
msg.obj = msgs;
 
mHandler.sendMessage(msg); // 핸들러로 메세지 전송
 
if (msgs.equals("# [" + nickName + "]님이 나가셨습니다.")) { // 서버에서
// 온
// 메세지가
// 종료
// 메세지라면
flag = true; // 스레드 종료를 위해 플래그를 true로 바꿈.
msg = new Message();
msg.what = 1; // 종료메세지
mHandler.sendMessage(msg);
}
}
 
} catch (Exception e) {
logger(e.getMessage());
}
}
}
 
}

 

별벼하늘 (440 포인트) 님이 2013년 8월 16일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...