Socket ASCii Zeichen werden nicht per udp übermittelt. please help .

Alexa

Mitglied
Mein Problem ist, das wenn ich über einen Telnet Client Programm ASCii Zeichen sende wie z.B. “A“ oder “B“ empfange ich diese Zeichen einwandfrei in einem remote Gerät, welches auf den befehl "A" wartet. Jetzt habe ich ein anderen Quellcode genommen der mir eigentlich zusagt jedoch sendet er die falschen Zeichenfolge.

Also es soll zum Beispiel “A“ gesendet werden bei entsprechendem Tastendruck.
Ich habe bereits die Werte in dem Code auf 65 (für A) eingegeben aber das scheint nicht richtig zu sein.


[JAVA=42]
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.

package com.remote.control;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.HashMap;
import java.util.Map;

import android.app.Activity;
import android.content.Intent;
import android.graphics.LightingColorFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import android.widget.ImageButton;

import com.remote.control.R.id;

public class RemoteControlActivity extends Activity {

private static final int REPEAT_DELAY = 333;

private Map<Integer, Byte> _codes = new HashMap<Integer, Byte>();

private OnClickListener _onClickListener = new OnClickListener() {

public void onClick(View v) {
Integer key = new Integer(v.getId());
if (_codes.containsKey(key)) {
sendByte(_codes.get(key));
}
}

};

private RepeatHandler _repeatHandler;

private OnLongClickListener _onLongClickListener = new OnLongClickListener() {

public boolean onLongClick(View v) {
Integer key = new Integer(v.getId());
if (_codes.containsKey(key)) {
sendByte(_codes.get(key));
_repeatHandler = new RepeatHandler(key);
_repeatHandler.removeCallbacks(_repeatTask);
_repeatHandler.postDelayed(_repeatTask, REPEAT_DELAY);
}
return false;
}

};

private Runnable _repeatTask = new Runnable() {

public void run() {
sendByte(_codes.get(_repeatHandler.getKeycode()));
// _repeatHandler.postDelayed(_repeatTask, REPEAT_DELAY);
}

};

private OnTouchListener _onTouchListener = new OnTouchListener() {

public boolean onTouch(View button, MotionEvent motion) {
if (motion.getAction() == MotionEvent.ACTION_UP) {
if (_repeatHandler != null) {
_repeatHandler.removeCallbacks(_repeatTask);
_repeatHandler = null;
}
}
return false;
}

};

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
Intent intent = new Intent(RemoteControlActivity.this,
LocationPreferenceActivity.class);
startActivity(intent);
}
return super.onKeyUp(keyCode, event);
}

private void setupLongClick(int id) {
View v = findViewById(id);
v.setOnLongClickListener(_onLongClickListener);
v.setOnTouchListener(_onTouchListener);
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

setupCodes();

findViewById(id.launch_media_center).setOnClickListener(_onClickListener);
findViewById(id.recorded_tv).setOnClickListener(_onClickListener);
findViewById(id.accept).setOnClickListener(_onClickListener);
findViewById(id.go_back).setOnClickListener(_onClickListener);
findViewById(id.left).setOnClickListener(_onClickListener);
findViewById(id.up).setOnClickListener(_onClickListener);
findViewById(id.down).setOnClickListener(_onClickListener);
findViewById(id.right).setOnClickListener(_onClickListener);
findViewById(id.mute).setOnClickListener(_onClickListener);
findViewById(id.volume_down).setOnClickListener(_onClickListener);
findViewById(id.volume_up).setOnClickListener(_onClickListener);
findViewById(id.play).setOnClickListener(_onClickListener);
findViewById(id.stop).setOnClickListener(_onClickListener);
findViewById(id.skip_backward).setOnClickListener(_onClickListener);
findViewById(id.skip_forward).setOnClickListener(_onClickListener);
findViewById(id.rewind).setOnClickListener(_onClickListener);
findViewById(id.fast_forward).setOnClickListener(_onClickListener);

setupLongClick(id.left);
setupLongClick(id.up);
setupLongClick(id.down);
setupLongClick(id.right);
setupLongClick(id.volume_down);
setupLongClick(id.volume_up);
setupLongClick(id.skip_backward);
setupLongClick(id.skip_forward);

setBackground(id.play, 0x22222222, 0xdd00dd00);
setBackground(id.stop, 0x22222222, 0xdddd0000);
setBackground(id.skip_backward, 0x22222222, 0x00dd00dd);
setBackground(id.skip_forward, 0x22222222, 0x00dddd00);
setBackground(id.rewind, 0xcccccccc, 0x00dd00dd);
setBackground(id.fast_forward, 0xcccccccc, 0x00dddd00);
setBackground(id.accept, 0xcccccccc, 0xdd00dd00);
setBackground(id.go_back, 0xcccccccc, 0xdddd0000);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

@Override
protected void onResume() {
RemoteControlApplication app = (RemoteControlApplication) getApplication();
Location location = app.getCurrentLocation();
if (location != null) {
String title = "Remote Control - " + location.getName();
setTitle(title);
} else {
setTitle("Remote Control");
}
super.onResume();
}

private void sendByte(byte b) {
RemoteControlApplication app = (RemoteControlApplication) getApplication();
Location location = app.getCurrentLocation();
if (location == null) {
return;
}
String host = location.getAddress();
int port = location.getPort();
byte[] message = { b };
try {
InetAddress address = InetAddress.getByName(host);
DatagramPacket packet = new DatagramPacket(message, message.length,
address, port);
DatagramSocket socket = new DatagramSocket();
socket.send(packet);
socket.close();
} catch (Exception e) {
Log.d("RemoteControl", e.toString());
}
}

private void setupCodes() {
_codes.put(new Integer(R.id.launch_media_center), new Byte((byte) 65));
_codes.put(new Integer(R.id.recorded_tv), new Byte((byte) 66));
_codes.put(new Integer(R.id.accept), new Byte((byte) 97));
_codes.put(new Integer(R.id.go_back), new Byte((byte) 98));
_codes.put(new Integer(R.id.left), new Byte((byte) 5));
_codes.put(new Integer(R.id.up), new Byte((byte) 6));
_codes.put(new Integer(R.id.down), new Byte((byte) 7));
_codes.put(new Integer(R.id.right), new Byte((byte) 8));
_codes.put(new Integer(R.id.mute), new Byte((byte) 9));
_codes.put(new Integer(R.id.volume_down), new Byte((byte) 10));
_codes.put(new Integer(R.id.volume_up), new Byte((byte) 11));
_codes.put(new Integer(R.id.play), new Byte((byte) 12));
_codes.put(new Integer(R.id.stop), new Byte((byte) 13));
_codes.put(new Integer(R.id.skip_backward), new Byte((byte) 14));
_codes.put(new Integer(R.id.skip_forward), new Byte((byte) 15));
_codes.put(new Integer(R.id.rewind), new Byte((byte) 16));
_codes.put(new Integer(R.id.fast_forward), new Byte((byte) 17));
}

private void setBackground(int buttonId, int mul, int add) {
ImageButton button = (ImageButton) findViewById(buttonId);
button.getBackground().setColorFilter(new LightingColorFilter(mul, add));
}

}
[/code]
 
T

trääät

Gast
ich frag mal aus reiner neugier da es aus deinem post nicht anders hervorgeht : kennst du den unterschied zwischen TCP und UDP ?

du schreibst das bei einer TCP-verbindung via TelNet die daten ankommen ... folglich wird die remote-app auch auf TCP arbeiten ...

nun versuchst du aber einfach scheinbar wahlos UDP-pakete an diese app zu senden worauf diese vermutlich überhaupt nicht ausgelegt ist und desshalb auch nicht auf die UDP-pakete reagiert ...

frage also : akzeptiert die remote-app überhaupt UDP oder arbeitet diese nur über TCP ?
auch anzumerken : bei UDP wird nicht garantiert das die daten auch überhaupt ankommen ... es kann also auch daran liegen das falls die remote-app auf UDP reagiert die pakete einfach auf dem weg dorthin verloren gehen

der code hilft in diesem fall leider überhaupt nichts da eher der code der remote-app relevant wäre ...
 

Alexa

Mitglied
Hi hier ist der Code des Remote Gerätes:
Code:
  // wait for a new client:
  Client client = server.available();
  
  // when the client sends the first byte, say hello:
  if (client) {
    if (!gotAMessage) {
      Serial.println("We have a new client");
      client.println("Hello, client!"); 
      gotAMessage = true;
    }
    
    // read the bytes incoming from the client:
    /* char */ byte incomingByte = client.read();
    
  // --------001--------------------------------------------------//

  if (incomingByte == 65){
    myPort.switchOn('a', 1, 1);  // -> send letter "A" via serial  
  }
  if (incomingByte == 66){
    myPort.switchOff(pinbrown);  //  -> send letter "B" via serial
  }
 
T

tröööt

Gast
1) es gibt CODE-tags -.-' ...
2) das birngt mir überhauptnichts da ich Server, Client, Serial und der gleichen nicht kenne ...

um dir also helfen zu können solltest du shcon mal den kompletten source des remotes posten .. sonst wird das rätzelraten
 

Alexa

Mitglied
hi danke für die Antwort ;)

einmal noch kurz vorweg:
kannst du mir sagen welcher vois absatz für das senden des codes verantworlich ist?
Ist es "setupCodes" "run" oder "sendByte" ?
 

Alexa

Mitglied
ich gehe mal davn aus das es "sendByte" ist was ausgeführt wird wenn der entsprechende Button gedrückt wird.
Beinhaltet "sendByte" das senden von "getApplication" + "getCurrentLocation" ?
 
T

tröööt

Gast
was man von der remote-app bräuchte wären die klassen

Server ... um zu wissen was genau bei "available()" passiert und zurückkommt
Client ... um zu wissen was das überhaupt ist und was bei den ganzen methoden passiert und welche typen die return-objekte haben
dann noch auf jeden fall "Serial" ... ud dann noch das was "myPort" ist ...

weil anhand deiner android-app erkennt man nur das dort UDP-datagramme verschickt werden ... aber von der remote-app erkennt man so überhaupt nichts ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I ASCII über serielle Schnittstelle Netzwerkprogrammierung 1
T HEX -> DEC -> ASCII ... falsches Encoding? Netzwerkprogrammierung 6
J Ascii / Unicode bei Sockets? Netzwerkprogrammierung 2
M Nur ASCII in URL, Umlautproblem bei Übertragung Netzwerkprogrammierung 10
B non US-ASCII Dateinamen über HTTP? Netzwerkprogrammierung 2
S Umlaute wie ê in sms werden als ? zeichen dargestellt Netzwerkprogrammierung 4
K Socket Nur bestimmte Zeichen als Kommunikation zulassen Netzwerkprogrammierung 1
F Socket Komische Zeichen Netzwerkprogrammierung 7
G Kryptische Zeichen beim Auslesen einer Website Netzwerkprogrammierung 11
W Zeichen von Client an Server schicken Netzwerkprogrammierung 5
A InputStream ließt nur 65536 Zeichen anstatt ganzer Puffer Netzwerkprogrammierung 8
G unbekannte Zeichen beim senden und lesen Netzwerkprogrammierung 2
I Email mit kyrillischen Zeichen in der Betreffzeile Netzwerkprogrammierung 7
K Java RMI bricht ab wenn Remote eine Methode ausgeführt werden soll Netzwerkprogrammierung 5
T DataOutputStream Nachrichten werden fehlerhaft gesendet. Netzwerkprogrammierung 1
E JCIFS - Smb - Datei kann nur von einem Benutzer bearbeitet werden Netzwerkprogrammierung 1
F Reader/ Writer werden nicht geschlossen Netzwerkprogrammierung 2
F Java Server Scanner oder InputStream kann nicht gelsesen werden! Netzwerkprogrammierung 6
X Daten können nicht sofort empfangen werden Netzwerkprogrammierung 1
B Methoden und Konstruktoren von Java.net package werden nicht geladen Netzwerkprogrammierung 2
H HTTP Header Response kann nicht ausgelesen werden Netzwerkprogrammierung 4
V Socket Objekte werden nicht aktualisiert Netzwerkprogrammierung 2
J Nach Dateiversand werden keine Nachrichten mehr übertragen Netzwerkprogrammierung 11
S Servlet - Datei kann nicht gelöscht werden Netzwerkprogrammierung 12
Semox HTTP Webserver: Externe Dateien werden nicht verwendet. Netzwerkprogrammierung 10
T Laufen Objekte, die vom Cajo-Server geliefert werden, lokal auf dem Client? Netzwerkprogrammierung 4
P Server/Client Daten empfangen, wenn Daten gesendet werden Netzwerkprogrammierung 9
OliverKroll Wie kann mit Java und CORBA der Ausfall des Servers abgefangen werden ? Netzwerkprogrammierung 9
D Daten, die mit PHP erzeugt werden, mit Java auslesen Netzwerkprogrammierung 8
D Lange Zeilen in Emails werden umgebrochen Netzwerkprogrammierung 2
A Wie werden Daten versendet? "Crashcode" Netzwerkprogrammierung 4
G CORBA Klassen werden nicht erkannt. Netzwerkprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben