- Forum-Beiträge: 2.492
21.11.2013, 17:58:13 via Website
21.11.2013 17:58:13 via Website
ich wollte gerne eine Client/Server Kommunikation herstellen, bei der zuerst nur der Client eine Nachricht an den Server senden kann.
Weil ich mich damit nicht auskenne habe ich einen "Standart" Code kopiert und eingefügt. Hab mir den Code durchgelesen, mich ein bisschen über Sockets informiert und den Code dann auch verstanden. Aber wenn ich den Server starten will (egal ob über Emulator oder meinem HTC) beendet sich die App.
folgender Fehler tritt auf:
2 E/AndroidRuntime(13974): java.lang.NullPointerException
3E/AndroidRuntime(13974): at com.example.server.MyServer$CommsThread.run(MyServer.java:73)
4E/AndroidRuntime(13974): at java.lang.Thread.run(Thread.java:864)
das ist meine Server Klasse:
2
3import java.io.BufferedReader;
4import java.io.IOException;
5import java.io.InputStreamReader;
6import java.net.ServerSocket;
7import java.net.Socket;
8
9import android.app.Activity;
10import android.os.Bundle;
11import android.os.Handler;
12import android.os.Message;
13import android.widget.TextView;
14
15public class MyServer extends Activity {
16 ServerSocket ss = null;
17 String mClientMsg = "";
18 Thread myCommsThread = null;
19 protected static final int MSG_ID = 0x1337;
20 public static final int SERVERPORT = 6000;
21 public static final String serverIpAddress = "10.0.2.2";
22
23 @Override
24 public void onCreate(Bundle savedInstanceState) {
25 super.onCreate(savedInstanceState);
26 setContentView(R.layout.my_server);
27 TextView tv = (TextView) findViewById(R.id.TextView01);
28 tv.setText("Noch nichts vom Client");
29 this.myCommsThread = new Thread(new CommsThread());
30 this.myCommsThread.start();
31 }
32
33 @Override
34 protected void onStop() {
35 super.onStop();
36 try {
37 ss.close();
38 } catch (IOException e) {
39 e.printStackTrace();
40 }
41 }
42
43 @Override
44protected void onResume() {
45 // TODO Auto-generated method stub
46 super.onResume();
47 this.myCommsThread.start();
48}
49
50Handler myUpdateHandler = new Handler() {
51 public void handleMessage(Message msg) {
52 switch (msg.what) {
53 case MSG_ID:
54 TextView tv = (TextView) findViewById(R.id.TextView01);
55 tv.setText(mClientMsg);
56 break;
57 default:
58 break;
59 }
60 super.handleMessage(msg);
61 }
62 };
63 class CommsThread implements Runnable {
64 public void run() {
65 Socket s = null;
66 try {
67 ss = new ServerSocket(SERVERPORT );
68 } catch (IOException e) {
69 e.printStackTrace();
70 }
71 while (!Thread.currentThread().isInterrupted()) {
72 Message m = new Message();
73 m.what = MSG_ID;
74 try {
75 if (s == null)
76 s = ss.accept();
77 BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
78 String st = null;
79 st = input.readLine();
80 mClientMsg = st;
81 myUpdateHandler.sendMessage(m);
82 } catch (IOException e) {
83 e.printStackTrace();
84 }
85 }
86 }
87 }
88}
s = ss.accept(); ist die Line 73. Ich denke das es irgendwie an dem Port liegt und der Socket nicht wirklich aufgebaut wird.
Übrigens gehen ich bei meinem HTC über WLan ins Internet.
Hat einer eine Idee wie ich das lösen kann? Ich würde gerne eine einfache Client/Server Kommunikation haben auf der ich dann aufbauen kann.
Gruß,
Lars
— geändert am 23.11.2013, 10:17:25
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.