S
Snipestyle
Erfahrenes Mitglied
- 3
Abend zusammen,
sitze momentan daran so eine art "chat" zu bauen.
Es ist aber auch nur eine Art Chat, da die eine Seite nur Nachrichten senden brauch und die andere nur Empfangen
Senden versuche ich so:
und Empfangen so:
Also vorher kontent sie so in Kontakt treten und der Receiver hat er kannt und eine dementsprechende Meldung ausgegeben wenn was vom Sender ankam. Ich habe dann
beim Senden, das hinzugefügt:
und beim Empfangen dementsprechen das:
Das Problem ist nun, dass wenn eine Nachricht abgesendet wird, die Empfänger App direkt komplett abstürzt. Ich kann das ganze aus gewissen Gründen leider nicht im Emulator testen, sonst würde ich noch ne LogCat dabei geben. Aber ich hoffe ihr könnt mir grundsätzlich etwas weiterhelfen
Schönen Abend noch
sitze momentan daran so eine art "chat" zu bauen.
Es ist aber auch nur eine Art Chat, da die eine Seite nur Nachrichten senden brauch und die andere nur Empfangen
Senden versuche ich so:
PHP:
public class MyClientTask extends AsyncTask<Void, Void, Void> {
String dstAddress;
int dstPort;
String response = "";
MyClientTask(String addr, int port){
dstAddress = addr;
dstPort = port;
}
@Override
protected Void doInBackground(Void... arg0) {
Socket socket = null;
try {
socket = new Socket(dstAddress, dstPort);
///////////
PrintWriter out = new PrintWriter(
new OutputStreamWriter(socket.getOutputStream()));
out.println("Testnachricht");
out.flush();
/////////
ByteArrayOutputStream byteArrayOutputStream =
new ByteArrayOutputStream(1024);
byte[] buffer = new byte[1024];
int bytesRead;
InputStream inputStream = socket.getInputStream();
while ((bytesRead = inputStream.read(buffer)) != -1){
byteArrayOutputStream.write(buffer, 0, bytesRead);
response += byteArrayOutputStream.toString("UTF-8");
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
response = "UnknownHostException: " + e.toString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
response = "IOException: " + e.toString();
}finally{
if(socket != null){
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// textResponse.setText(response);
super.onPostExecute(result);
}
}
und Empfangen so:
PHP:
private class SocketServerThread extends Thread {
static final int SocketServerPORT = 8080;
int count = 0;
@Override
public void run() {
try {
serverSocket = new ServerSocket(SocketServerPORT);
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
info.setText("I'm waiting here: "
+ serverSocket.getLocalPort());
}
});
while (true) {
Socket socket = serverSocket.accept();
//////
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
while (true) {
String msgg = in.readLine();
if (msg == null) {
break; // disconnected
} else {
msg.setText(msgg);
}
}
///
count++;
message += "#" + count + " from " + socket.getInetAddress()
+ ":" + socket.getPort() + "\n";
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
// msg.setText(message);
}
});
SocketServerReplyThread socketServerReplyThread = new SocketServerReplyThread(
socket, count);
socketServerReplyThread.run();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private class SocketServerReplyThread extends Thread {
private Socket hostThreadSocket;
int cnt;
SocketServerReplyThread(Socket socket, int c) {
hostThreadSocket = socket;
cnt = c;
}
@Override
public void run() {
OutputStream outputStream;
String msgReply = "Hello from Android, you are #" + cnt;
try {
outputStream = hostThreadSocket.getOutputStream();
PrintStream printStream = new PrintStream(outputStream);
printStream.print(msgReply);
printStream.close();
message += "replayed: " + msgReply + "\n";
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
msg.setText(message);
}
});
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
message += "Something wrong! " + e.toString() + "\n";
}
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
msg.setText(message);
}
});
}
}
private String getIpAddress() {
String ip = "";
try {
Enumeration<NetworkInterface> enumNetworkInterfaces = NetworkInterface
.getNetworkInterfaces();
while (enumNetworkInterfaces.hasMoreElements()) {
NetworkInterface networkInterface = enumNetworkInterfaces
.nextElement();
Enumeration<InetAddress> enumInetAddress = networkInterface
.getInetAddresses();
while (enumInetAddress.hasMoreElements()) {
InetAddress inetAddress = enumInetAddress.nextElement();
if (inetAddress.isSiteLocalAddress()) {
ip += "SiteLocalAddress: "
+ inetAddress.getHostAddress() + "\n";
}
}
}
Also vorher kontent sie so in Kontakt treten und der Receiver hat er kannt und eine dementsprechende Meldung ausgegeben wenn was vom Sender ankam. Ich habe dann
beim Senden, das hinzugefügt:
PHP:
PrintWriter out = new PrintWriter(
new OutputStreamWriter(socket.getOutputStream()));
out.println("Testnachricht");
out.flush();
und beim Empfangen dementsprechen das:
PHP:
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
while (true) {
String msgg = in.readLine();
if (msg == null) {
break; // disconnected
} else {
msg.setText(msgg);
}
}
Das Problem ist nun, dass wenn eine Nachricht abgesendet wird, die Empfänger App direkt komplett abstürzt. Ich kann das ganze aus gewissen Gründen leider nicht im Emulator testen, sonst würde ich noch ne LogCat dabei geben. Aber ich hoffe ihr könnt mir grundsätzlich etwas weiterhelfen
Schönen Abend noch