안드로이드 개발 질문/답변
(글 수 45,052)
Java Server
import java.io.*; import java.net.*;
Java Server
public class Server extends Thread{
static ServerSocket serverSocket = null;
static Socket socket = null;
public void run(){
connect();
try{
while(true){
updateMessage.start();
sendMessage.start();
}
}catch(Exception e){
}
}
private Thread sendMessage = new Thread(){
public void run(){
try{
while(true){
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter networkWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
PrintWriter out = new PrintWriter(networkWriter, true);
out.println(reader.readLine());
out.flush();
if(reader.readLine().equals("bye")){
socket.close();
}
networkWriter.close();
out.close();
reader.close();
}
}catch(Exception e){
}
}
};
private Thread updateMessage = new Thread(){
public void run(){
try{
while(true){
BufferedReader networkReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = networkReader.readLine();
System.out.println("Input : "+str);
networkReader.close();
}
}catch(Exception e){
}
}
};
public void connect(){
try{
System.out.println("소켓 생성중...");
serverSocket = new ServerSocket(9001);
while(true){
socket = serverSocket.accept();
InetAddress clientHost = socket.getLocalAddress();
int clientport = socket.getPort();
System.out.println("연결된 클라이언트 : \n ip : "+clientHost+", 포트 : "+clientport);
}
}catch(Exception e){}
}
public static void main(String[] args) {
Thread th = new Thread(new Server());
th.start();
}
}
Android Client
package com.pack.scr;
Android Client
import java.io.*; import java.net.Socket;
Android Client
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.View; import android.view.View.*; import android.widget.*;
Android Client
public class Control extends Activity {
static String command;
private String html = "";
private Handler mHandler;
private Socket socket;
private String name;
private BufferedReader networkReader;
private BufferedWriter networkWriter;
private String ip = "203.250.133.238"; // IP
private int port = 9001; // PORT번호
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Intent client = new Intent(this, ServerService.class);
// startService(client);
setContentView(R.layout.control);
mHandler = new Handler();
try {
setSocket(ip, port);
} catch (IOException e1) {
e1.printStackTrace();
}
checkUpdate.start();
Button navigator = (Button)findViewById(R.id.navigator_tab);
Button rcview = (Button)findViewById(R.id.rcview_tab);
navigator.setOnClickListener(new OnClickListener(){
public void onClick(View v)
{
Intent intent = new Intent(Control.this, Navigator.class);
startActivity(intent);
}});
rcview.setOnClickListener(new OnClickListener(){
public void onClick(View v)
{
Intent intent = new Intent(Control.this, RCView.class);
startActivity(intent);
}});
}
public void onClick(View v){
String view = v.toString();
if(view.equals(findViewById(R.id.up_button).toString()))
command = "up";
else if(view.equals(findViewById(R.id.left_button).toString()))
command = "left";
else if(view.equals(findViewById(R.id.center_button).toString()))
command = "stop";
else if(view.equals(findViewById(R.id.right_button).toString()))
command = "right";
else if(view.equals(findViewById(R.id.down_button).toString()))
command = "down";
sendMessage.start();
}
private Thread checkUpdate = new Thread() {
public void run() {
try {
String line;
Log.w("ChattingStart", "Start Thread");
while (true) {
Log.w("Chatting is running", "chatting is running");
networkReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
line = networkReader.readLine();
html = line;
mHandler.post(showUpdate);
networkReader.close();
}
} catch (Exception e) {
}
}
};
private Runnable showUpdate = new Runnable() {
public void run() {
Toast.makeText(Control.this, "Coming word: " + html,
Toast.LENGTH_SHORT).show();
}
};
private Thread sendMessage = new Thread(){
public void run(){
try{
while(true){
networkWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
PrintWriter out = new PrintWriter(networkWriter, true);
out.println(command);
out.flush();
out.close();
networkWriter.close();
}
}catch(Exception e){
}
}
};
public void setSocket(String ip, int port) throws IOException {
try {
socket = new Socket(ip, port);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Java서버와 Android Client간의 지속적인 통신을 원하는데요
채팅과 같이 계속 서로 데이터를 전송하고자 하는데 자꾸 한번씩만 전송되고 그 이후에는 안되네요 ㅜㅜ
Buffer를 이용한 것들은 전송 후 close해 줘야 다음에 다시 전송할때 활성화 시킬 수 있다고 알고 있습니다.
PrintWriter도 동일하게 생각해 close()해주고 있구요.
송신, 수신 모두 Thread 내에서 While(true)를 이용해 무한 반복으로 적용 시켰는데
왜자꾸 전송이 안되는지 모르겠어요 ㅜㅜ 알려주세요 ㅜㅜ




흠 소스가 길어서 눈에 잘 안들어 오는데요. 기억이 좀 가물가물하긴 하지만 소켙 통신할 때 쓰레드 안에서 IO를 닫아버리시면 소켙 자체가 닫혔던 것 같은데 PrinterWriter닫으신 다음에도 클라이언트 소켙이 제대로 접속이 되었는지 확인해 보세요.