안드로이드 용 작은 클라이언트 서버 응용 프로그램을 작성했습니다. 안드로이드 전화가 서버 인 동안 클라이언트는 내 PC에서 실행되는 Java 프로그램입니다. 나는 내 서버 프로그램에서 강제로 가까운 문제에 직면하고있다. 서버는 꽤 잘 시작하지만 내 PC 클라이언트에서 문자열을 보내면 안드로이드 응용 프로그램 (서버) 강제 종료됩니다. 정말 짜증이났다. 도와주세요! 여기 안드로이드 서버가 다운 됨
내 클라이언트 프로그램을 내 PC에서 실행되고 :package com.vinit.androidserver;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
public class MainActivity extends Activity {
ServerSocket ss = null;
String mClientMsg = "";
Thread myCommsThread = null;
protected static final int MSG_ID = 0x1337;
public static final int SERVERPORT = 4444;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView tv=(TextView)findViewById(R.id.textView1);
tv.setText("Nothing from client yet");
this.myCommsThread = new Thread(new CommsThread());
this.myCommsThread.start();
}
@Override
protected void onStop() {
super.onStop();
try {
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Handler myUpdateHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_ID:
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText(mClientMsg);
break;
default:
break;
}
super.handleMessage(msg);
}
};
class CommsThread implements Runnable {
public void run() {
Socket s = null;
try {
ss = new ServerSocket(SERVERPORT);
} catch (IOException e) {
e.printStackTrace();
}
while (!Thread.currentThread().isInterrupted()) {
Message m = new Message();
m.what = MSG_ID;
try {
if (s == null)
s = ss.accept();
BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
String st = null;
st = input.readLine();
mClientMsg = st;
myUpdateHandler.sendMessage(m);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
권한 : 여기
package javaNetPackage;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JOptionPane;
public class javaClient {
/**
* @param args
*/
public static void main(String[] args) throws IOException {
Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;
String serverIpAddress = "10.81.242.220";
try {
InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
echoSocket = new Socket(serverAddr, 4444);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Don't know about host");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for "
+ "the connection to server");
System.exit(1);
}
String str = JOptionPane.showInputDialog("Please give number");
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(echoSocket.getOutputStream())),true);
out.println(str);
out.close();
in.close();
echoSocket.close();
}
}
을 그리고 것은 안드로이드에서 실행 내 서버 코드
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
업데이트 :: 좋아, 나는 힘의 문제를 해결했다. manifest.xml에서 권한 태그를 삭제하고 다시 입력했습니다. 하지만 지금은 다른 문제에 직면하고 있습니다. PC 클라이언트에서 보낸 문자열이 내 서버 TextView (레이아웃 xml의 textView1, 서버 코드에서 tv라고 함)에 표시되지 않습니다. TV의 기본 메시지는 "아직 클라이언트가 없습니다."입니다. PC 클라이언트에서 문자열을 보내면 기본 메시지가 사라지지만 보낸 문자열은 서버 TextView (tv)에서 업데이트되지 않습니다.
Android 프로세스 로그에서 프로세스에 대해 무엇을 말합니까? 발생하는 예외의 이름과 위치를 알려줍니다. –