Datei senden via Xmodem an Serial-Port

  • Themenstarter Gelöschtes Mitglied 65862
  • Beginndatum
G

Gelöschtes Mitglied 65862

Gast
In einem aktuellen Projekt, möchte ich einen Cisco-Switch mithilfe meines Tools konfigurieren lassen.
Soweit kann ich über Serial-Port eine Verbindung zum Switch herstellen und die Konfiguration größtenteils durchführen. Allerdings muss ich an einer Stelle das Konfigurationstemplate an den Switch mittels Xmodem senden und genau dort scheitere ich.

Nämlich erhalte ich folgenden Fehler: The read operation timed out before any data was returned.

Der Error tritt in Zeile 112 und 252 auf. (Quellcode weiter unten)

Wenn ich mich nicht irre, geht es hierbei um den fehlenden InputStream des Switches. Allerdings erhalte ich keinen Input des Switches, sondern sende nur Output (Konfigurationsbefehle) an diesen.

Meine Frage: Kann mir vlt. jemand dabei weiterhelfen, wie ich es schaffe das Problem zu beheben und die Datei an den Switch zu senden? Ich bin für jede Hilfe und alle Tipps sehr dankbar.

[CODE lang="java" title="Xmodem Quellcode" highlight="112, 252"]
public class Xmodem
{
// start
private final byte SOH = 0x01;
// The end of the
private final byte EOT = 0x04;
// The reply
private final byte ACK = 0x06;
// The retransmission
private final byte NAK = 0x15;
// Unconditional termination
@SuppressWarnings("unused")
private final byte CAN = 0x18;

// In order to 4278 Data is transmitted in the form of byte blocks
private final int SECTOR_SIZE = 128; //Standardwert: 128
// Maximum error (no reply) number of packets
private final int MAX_ERRORS = 10;

// Input stream for reading serial port data
private InputStream inStream;
// Output stream for sending serial port data
private OutputStream outStream;

public Xmodem(InputStream inStream, OutputStream outStream)
{
this.inStream = inStream;
this.outStream = outStream;
}

/**
* To send data
*
* @param filePath
* The file path
*/
public void send(final String filePath)
{
new Thread()
{
public void run()
{
try
{
// Error packets
int errorCount;
// Package number
byte blockNumber = 0x01;
// The checksum
int checkSum;
// The number of bytes read into the buffer
int nbytes;
// Initializes the data buffer
byte[] sector = new byte[SECTOR_SIZE];
// Read file initialization
@SuppressWarnings("resource")
DataInputStream inputStream = new DataInputStream(new FileInputStream(filePath));

while ((nbytes = inputStream.read(sector)) > 0)
{
// If the last 1 Packet data less than 128 Two bytes, so 0xff A filling
if (nbytes < SECTOR_SIZE)
{
for (int i = nbytes; i < SECTOR_SIZE; i++)
{
sector = (byte) 0xff;
}
}

// with 1 Packet data is sent at most 10 time
errorCount = 0;
while (errorCount < MAX_ERRORS)
{
// Set of packages
// Control characters + Package number + The inverse of the package number + data + The checksum
putData(SOH);
putData(blockNumber);
putData(~blockNumber);
checkSum = CRC16.calc(sector) & 0x00ffff;
putChar(sector, (short) checkSum);
outStream.flush();

// Get response data
byte data = getData();
// If you receive response data, jump out of the loop and send it 1 Packet data
// No reply received, error number of packets +1 , continue to resend
if (data == ACK)
{
break;
}
else
{
++errorCount;
}
}
// The package number is self-increasing
blockNumber = (byte) ((++blockNumber) % 256);
}

// When all data is sent, the end of sending is identified
boolean isAck = false;
while (!isAck)
{
putData(EOT);
isAck = getData() == ACK;
}
}
catch (Exception e)
{
e.printStackTrace();
}
};
}.start();
}

/**
* Receive data
*
* @param filePath
* The file path
* @return Whether the reception is completed
* @throws IOException
* abnormal
*/
public boolean receive(String filePath) throws Exception
{
// Error packets
int errorCount = 0;
// Package number
byte blocknumber = 0x01;
// data
byte data;
// The checksum
int checkSum;
// Initializes the data buffer
byte[] sector = new byte[SECTOR_SIZE];
// Write file initialization
DataOutputStream outputStream = new DataOutputStream(new FileOutputStream(filePath));

// Send characters C . CRC Way to check
putData((byte) 0x43);

while (true)
{
if (errorCount > MAX_ERRORS)
{
outputStream.close();
return false;
}

// Get response data
data = getData();
if (data != EOT)
{
try
{
// Determine whether the received start id is
if (data != SOH)
{
errorCount++;
continue;
}

// Gets the package number
data = getData();
// Determine if the package number is correct
if (data != blocknumber)
{
errorCount++;
continue;
}

// Gets the inverse of the package number
byte _blocknumber = (byte) ~getData();
// Determine whether the inverse of the package number is correct
if (data != _blocknumber)
{
errorCount++;
continue;
}

// To get the data
for (int i = 0; i < SECTOR_SIZE; i++)
{
sector = getData();
}

// Get the checksum
checkSum = (getData() & 0xff) << 8;
checkSum |= (getData() & 0xff);
// Determine if the checksum is correct
int crc = CRC16.calc(sector);
if (crc != checkSum)
{
errorCount++;
continue;
}

// Send a reply
putData(ACK);
// The package number is self-increasing
blocknumber++;
// Write data locally
outputStream.write(sector);
// Error packets return to zero
errorCount = 0;

}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
// If an error is sent, a retransmission id is sent
if (errorCount != 0)
{
putData(NAK);
}
}
}
else
{
break;
}
}

// Turn off the output stream
outputStream.close();
// Send a reply
putData(ACK);

return true;
}

/**
* To get the data
*
* @return data
* @throws IOException
* abnormal
*/
private byte getData() throws IOException
{
return (byte) inStream.read();
}

/**
* To send data
*
* @param data
* data
* @throws IOException
* abnormal
*/
private void putData(int data) throws IOException
{
outStream.write((byte) data);
}

/**
* To send data
*
* @param data
* data
* @param checkSum
* The checksum
* @throws IOException
* abnormal
*/
private void putChar(byte[] data, short checkSum) throws IOException
{
ByteBuffer bb = ByteBuffer.allocate(data.length + 2).order(ByteOrder.BIG_ENDIAN);
bb.put(data);
bb.putShort(checkSum);
outStream.write(bb.array());
}
}


class CRC16
{
private static final char crctable[] =
{
0x0000, 0x1021, 0x2042, 0x3063,
0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b,
0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252,
0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a,
0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401,
0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509,
0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630,
0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738,
0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7,
0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af,
0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96,
0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e,
0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5,
0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd,
0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4,
0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc,
0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb,
0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3,
0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da,
0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2,
0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589,
0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481,
0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8,
0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0,
0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f,
0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827,
0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e,
0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16,
0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d,
0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45,
0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c,
0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74,
0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
};

public static char calc(byte[] bytes)
{
char crc = 0x0000;
for (byte b : bytes)
{
crc = (char) ((crc << 8) ^ crctable[((crc >> 8) ^ b) & 0x00ff]);
}
return (char) (crc);
}
}[/CODE]

[CODE lang="java" title="Aufrufen der Xmodem Class in einer anderen Class" highlight="11, 13"] public synchronized void importTemplate() throws Exception
{
// else if(inStream.equals(inputText3)) //Input: "Would you like to enter the initial configuration dialog? [yes/no]:"
outStream.write(outputText7.getBytes()); //Simulieren des Enter-Tastendrucks
outStream.write(outputText5.getBytes()); //Befehl "no"
outStream.write(outputText8.getBytes()); //Befehl "enable"
outStream.write(outputText9.getBytes()); //Befehl "copy xmodem: running-config"
outStream.write(outputText7.getBytes()); //Simulieren des Enter-Tastendrucks

//xmodem einbinden, um das Konfigurationstemplate dem Switch zu senden
Xmodem xmodem = new Xmodem(serialPort.getInputStream(),serialPort.getOutputStream()); // serialPort Is a serial port object
//Dateipfad des Konfigurationstemplate
xmodem.send(filePath);

outStream.write(outputText10.getBytes()); //Befehl "write"
}[/CODE]
 
G

Gelöschtes Mitglied 65862

Gast
Wie/womit greifst Du auf die serielle Schnittstelle zu?
Ich denke mal Du fragst, mit welcher Library.
Hab zu Beginn mit RxTx gearbeitet, hab damit allerdings immer wieder Probleme gehabt. Bin dann letztendlich auf jserialcomm gewechselt und seitdem läuft es auf jeden Fall etwas besser. Muss aber ehrlich sagen, dass ich wohl möglich noch einige RxTx-Commands benutze.
Wolltest Du das wissen?

Mir ist zudem aufgefallen, dass ich falsche Zeilenangaben gemacht habe.
Der Error tritt in den Zeile 105 und 258 auf.
 
Zuletzt bearbeitet von einem Moderator:
G

Gelöschtes Mitglied 65862

Gast
Ja, dann kann ich das mal nachbauen :)

Der Sender soll vor dem Versand auf ein NAK oder eben ein "C" des Empfängers warten, um zu entscheiden, ob es normales XMODEM oder XMODEM-CRC ist. Weiß nicht, ob das hier eine Rolle spielt.
Okay, soweit logisch. Ich hab mal mein Programm bis zur besagten Xmodem Stelle durchlaufen lassen.

Ich denke mal, folgendes "C" wird abgefragt: (Ausgabe des Switch an den Serial-Port) (Aufgezeichnet mit einem Serial-Port Monitor)

Switch#copy xmodem: running-config
Destination filename [running-config]?
Begin the Xmodem or Xmodem-1K transfer now...
CCCCCCCCCC <----------------------------
%Error opening xmodem: (I/O error)
Switch#

Wie man sieht geht das "C" über den InputStream nicht an die Abfrage weiter, weil ich ehrlicherweise nicht weiß, wie genau das umzusetzen ist.
Kannst du mir da vlt. Tipps geben bzw. weiterhelfen?
 
G

Gelöschtes Mitglied 65862

Gast
So wie Du später auf ein ACK wartest, musst Du zu Beginn des Sendens auf das C warten.
Okay, verstehe. Nur leider weiß ich echt nicht, wo diese "C"-Abfrage einzubauen ist. Hab mir das gerade angeschaut, aber komme einfach nicht drauf.

Ich denke mal in diesem Bereich irgendwo:
[CODE lang="java" title=""C"-Abfrage Stelle"]
public void send(final String filePath)
{
new Thread()
{
public void run()
{
try
{
// Error packets
int errorCount;
// Package number
byte blockNumber = 0x01;
// The checksum
int checkSum;
// The number of bytes read into the buffer
int nbytes;
// Initializes the data buffer
byte[] sector = new byte[SECTOR_SIZE];
// Read file initialization
@SuppressWarnings("resource")
DataInputStream inputStream = new DataInputStream(new FileInputStream(filePath));

while ((nbytes = inputStream.read(sector)) > 0)
{
// If the last 1 Packet data less than 128 Two bytes, so 0xff A filling
if (nbytes < SECTOR_SIZE)
{
for (int i = nbytes; i < SECTOR_SIZE; i++)
{
sector = (byte) 0xff;
}
}

// with 1 Packet data is sent at most 10 time
errorCount = 0;
while (errorCount < MAX_ERRORS)
{
// Set of packages
// Control characters + Package number + The inverse of the package number + data + The checksum
putData(SOH);
putData(blockNumber);
putData(~blockNumber);
checkSum = CRC16.calc(sector) & 0x00ffff;
putChar(sector, (short) checkSum);
outStream.flush();[/CODE]


Ist die "C"- Abfrage dann genau so aufgebaut wie die ACK-Abfrage oder muss ich den InputStream vom Switch erst in einen String umwandeln und dann mit dem Char "C" vergleichen?

Bin Dir für die Hilfe sehr Dankbar :)
 

mihe7

Top Contributor
Es gibt ja diverse Möglichkeiten. Eine davon wäre, vor dem while, also vor Zeile 22, in einer Schleife so lange Bytes zu empfangen, bis ein C erhalten oder die Zahl an Fehlern überschritten wurde. Für den Vergleich kannst Du Dir ja eine Konstante für das 'C' (0x43) definieren. Also etwas wie

Java:
while (errorCount < MAX_ERRORS && getData() != XMODEM_CRC) {
    errorCount++;
}
wobei XMODEM_CRC für 0x43 ('C') steht.
 
G

Gelöschtes Mitglied 65862

Gast
Es gibt ja diverse Möglichkeiten. Eine davon wäre, vor dem while, also vor Zeile 22, in einer Schleife so lange Bytes zu empfangen, bis ein C erhalten oder die Zahl an Fehlern überschritten wurde. Für den Vergleich kannst Du Dir ja eine Konstante für das 'C' (0x43) definieren. Also etwas wie

Java:
while (errorCount < MAX_ERRORS && getData() != XMODEM_CRC) {
    errorCount++;
}
wobei XMODEM_CRC für 0x43 ('C') steht.
Zunächst vielen Dank für Deine Antwort. Ich hab es gerade mal versucht, bekomme aber wieder den Error:
[CODE lang="java" title="Error"]com.fazecast.jSerialComm.SerialPortTimeoutException: The read operation timed out before any data was returned.
at com.fazecast.jSerialComm.SerialPort$SerialPortInputStream.read(SerialPort.java:1450)
at switchbespielung.Xmodem.getData(Xmodem.java:259)
at switchbespielung.Xmodem$1.run(Xmodem.java:69)[/CODE]

Der Error in Zeile 69 ist in dem Fall der neu hinzugefügte Quellcode:
[CODE lang="java" title="Erste Stelle"]errorCount = 0;
while (errorCount < MAX_ERRORS && getData() != XMODEM_CRC)
{
++errorCount;
}[/CODE]

und der Error in Zeile 259 ist folgender Quellcode:
[CODE lang="java" title="Zweite Stelle" highlight="10"] /**
* To get the data
*
* @return data
* @throws IOException
* abnormal
*/
private byte getData() throws IOException
{
return (byte) inStream.read();
}[/CODE]

Ich hab gerade nochmal darüber nachgedacht, ob es vlt. am InputStream liegt, dass dieser nicht korrekt entgegengenommen wird. Allerdings konnte ich jetzt selbst nichts falsches erkennen.

Wär es okay, wenn ich mal mein Skript zur Verbindungsherstellung mit dem Serial Port posten würde? Vlt. hilft das ja etwas weiter. :)

Vielen Dank für die Hilfe :)
 
G

Gelöschtes Mitglied 65862

Gast
Ich geh mal stark davon aus, dass du meine Serial Port Verbindung meinst.
Ich stelle dann einfach mal meinen Quellcode ein, den ich nutze, um mich mit dem Serial Port zu verbinden.

Wird der Serial Port schon genutzt oder ist kein aktiver vorhanden, wird eine Exception ausgegeben:

[CODE lang="java" title="Verbindung"] public void connect(String COM3) throws IOException
{
try
{
// Obtain a CommPortIdentifier object for the port you want to open
// CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM3");
SerialPort serialPort = SerialPort.getCommPorts()[0];

if (serialPort.isOpen())
{
System.out.println("Error: Sie sind bereits mit dem COM3-Port verbunden!");
serialPort.closePort();
}
else
{
// Get the port's ownership
serialPort.openPort();
serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 0, 0);

// Set the parameters of the connection.
setSerialPortParameters();

// Open the input and output streams for the connection. If they won't
// open, close the port before throwing an exception.
outStream = serialPort.getOutputStream();
inStream = serialPort.getInputStream();

//EventListener
serialPort.addDataListener(new SerialInput(inStream));

// Hinweisen, wenn Daten vorhanden sind
//serialPort.notifyOnDataAvailable(true);
System.out.println("Verbindung zum COM3-Port hergestellt!\n");
}
}
catch (IOException e)
{
serialPort.closePort();
throw e;
}
}[/CODE]

Ist der Port verfügbar und wird noch nicht genutzt, so wird die Bespielung zunächst gestartet. Da das bei mir der Fall ist, denke ich hat es nichts mit der Verbindung zu tun. Jedenfalls wüsste ich auf anhieb nicht was.

Die if-Abfragen kannst Du eig ignorieren, da das Programm nicht in diese reingeht. Da weiß ich ehrlich gesagt auch noch nicht, woran es liegt.

Ich würde eig gerne meine gesamte class nochmal hochladen, die ich nutze, um eine Verbindung zum Serial Port herzustellen. Grund dafür ist, dass ich von rxtx auf jSerialComm umgestiegen bin und denke, dass ich jetzt mehrere Commands von beiden Librarys in meinem Quellcode habe.

Ich glaube, dass das Problem in dieser Class auftritt, weshalb ich meine Datei mittels Xmodem nicht senden kann.
 

mihe7

Top Contributor
Ja, lad mal komplett hoch. Im Code oben sieht man das Interessantere nicht (setSerialPortParameters) :)

EDIT: Du kannst auch zippen.

Ich geh mal stark davon aus, dass du meine Serial Port Verbindung meinst.
Ja, klar. Ich meinte, Du sollst einfach ein kleines Testprogramm schreiben: Mit switch Verbinden, dessen Ausgabe ausgeben, irgendwelche Befehle rüberschicken. Irgendwas, damit Du siehst, dass es grundsätzlich funktioniert.
 
G

Gelöschtes Mitglied 65862

Gast
[CODE lang="java" title="Serial-Port Verbindung"]import java.io.*;
import gnu.io.*;
import gnu.io.SerialPortEvent;
import com.fazecast.jSerialComm.SerialPort;


public class SerialPortHandler implements SerialPortEventListener
{
private SerialPort serialPort = SerialPort.getCommPorts()[0];
private OutputStream outStream;
private InputStream inStream;

//Befehle
String outputText1 = "flash_init\n";
String outputText11 = "dir flash:\n";
String outputText2 = "delete flash:config.text\n";
String outputText3 = "delete flash:vlan.dat\n";
String outputText4 = "yes\n";
String outputText5 = "no\n";
String outputText6 = "boot\n";
String outputText7 = "\r\n"; //Enter-Tastendruck
String outputText8 = "enable\n";
String outputText9 = "copy xmodem: running-config\n";
String outputText10 = "write\n";

//Dateipfad des Konfigurationstemplate
String filePath = "C:\\Abschlussprojekt\\eclipse\\switchbespielung\\w8003337.txt";
String path = filePath.replace("\\", "/");

//Zu vergleichender Input vom Switch
String inputText1 = "Are you sure you want to delete \"flash:config.text\" (y/n)?";
String inputText2 = "Are you sure you want to delete \"flash:vlan.dat\" (y/n)?";
String inputText3 = "Would you like to enter the initial configuration dialog? [yes/no]:";
//private byte[] readBuffer = new byte[400];


public void serialEvent(SerialPortEvent arg0)
{
// TODO Auto-generated method stub
}


/**
* Get the serial port input stream
* @return The serial port input stream
*/
public InputStream getSerialInputStream()
{
return inStream;
}

/**
* Get the serial port output stream
* @return The serial port output stream
*/
public OutputStream getSerialOutputStream()
{
return outStream;
}

/**
* Sets the serial port parameters
*/
void setSerialPortParameters() throws IOException
{

int baudRate = 9600; // 9600bps
//COM-Port Einstellungen
serialPort.setComPortParameters(baudRate, 8, SerialPort.ONE_STOP_BIT, SerialPort.NO_PARITY);
serialPort.setFlowControl(SerialPort.FLOW_CONTROL_DISABLED);
}


//Verbindung zum SerialPort
public void connect(String COM3) throws IOException
{
try
{
// Obtain a CommPortIdentifier object for the port you want to open
//CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM3");
SerialPort serialPort = SerialPort.getCommPorts()[0];

if (serialPort.isOpen())
{
System.err.println("Error: Sie sind bereits mit dem COM3-Port verbunden!");
}
else
{
// Get the port's ownership
serialPort.openPort();
//serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 0, 0);

// Set the parameters of the connection.
setSerialPortParameters();

// Open the input and output streams for the connection. If they won't
// open, close the port before throwing an exception.
outStream = serialPort.getOutputStream();
inStream = serialPort.getInputStream();

//EventListener
serialPort.addDataListener(new SerialInput(inStream));

// Hinweisen, wenn Daten vorhanden sind
//serialPort.notifyOnDataAvailable(true);
System.out.println("Verbindung zum COM3-Port hergestellt!\n");
}
}
catch (IOException e)
{
serialPort.closePort();
throw e;
}
}


//Text an COM-Port senden
// @SuppressWarnings("unlikely-arg-type")
public void outputStream() throws IOException, InterruptedException
{
System.out.println("Grundkonfiguration des Switches startet!");

outStream.write(outputText1.getBytes()); // Befehl "flash_init"

// outStream.write(outputText11.getBytes()); // Befehl "dir flash:"

outStream.write(outputText2.getBytes()); //Befehl "delete flash:config.text"

// if (inStream.equals(inputText1)) //Input: "Are you sure you want to delete "flash:config.text" (y/n)?
// {
outStream.write(outputText4.getBytes()); //Befehl "yes"
outStream.write(outputText3.getBytes()); //Befehl "delete flash:vlan.dat"
// }
// else if(inStream.equals(inputText2)) ////Input: "Are you sure you want to delete "flash:vlan.dat" (y/n)?"
// {
outStream.write(outputText4.getBytes()); //Befehl "yes"
outStream.write(outputText6.getBytes()); //Befehl "boot"
serialPort.closePort();
}


//Konfigurationstemplate importieren
public void importTemplate() throws Exception
{
System.out.println("Aufspielen des Konfigurationstemplates beginnt in Kuerze!");

// else if(inStream.equals(inputText3)) //Input: "Would you like to enter the initial configuration dialog? [yes/no]:"
outStream.write(outputText7.getBytes()); //Simulieren des Enter-Tastendrucks
outStream.write(outputText5.getBytes()); //Befehl "no"
outStream.write(outputText8.getBytes()); //Befehl "enable"
outStream.write(outputText9.getBytes()); //Befehl "copy xmodem: running-config"
outStream.write(outputText7.getBytes()); //Simulieren des Enter-Tastendrucks

//xmodem einbinden, um das Konfigurationstemplate dem Switch zu senden
// serialPort Is a serial port object
Xmodem xmodem = new Xmodem(serialPort.getInputStream(),serialPort.getOutputStream());
//Dateipfad des Konfigurationstemplate
xmodem.send(filePath);

outStream.write(outputText10.getBytes()); //Befehl "write"
}


// public int getListeningEvents()
// {
// // TODO Auto-generated method stub
// return 0;
// }
//
// public void serialEvent(com.fazecast.jSerialComm.SerialPortEvent arg0)
// {
// // TODO Auto-generated method stub
//
// }



//Mögliche Erweiterungen:

//Verbindung trennen (Serial Port)
// if (serialPort != null)
// {
// InputStream in = serialPort.getInputStream();
// OutputStream out = serialPort.getOutputStream();
// try
// {
//
// serialPort.removeDataListener();
//
// in.close();
// out.close();
// }
// catch (IOException ex)
// {}
// serialPort.closePort();
// }


//Text empfangen COM-Port
// public void inputStream()
// {
// try
// {
// int availableBytes = inStream.available();
// if (availableBytes >= 0)
// {
// // Read the serial port
// inStream.read(readBuffer, 0, availableBytes);
//
// // Print it out
// System.out.println(new String(readBuffer, 0, availableBytes));
// }
// else
// {
// System.out.println("\nEs geht kein Input vom COM-Port ein!");
// }
// }
// catch (IOException e)
// {}
// }


// //Wenn Text vom COM-Port eingeht = Empfangenen Text ausgeben
// public void inputStream(SerialPortEvent event)
// {
// switch (event.getEventType())
// {
// case SerialPortEvent.DATA_AVAILABLE:
// inputStream();
// break;
// }
// }


// COM feststellen
// public void ComPortIdentifier(String[] args) {
// System.out.println("Program Started!!!");
//
// CommPortIdentifier serialPortId;
//
// @SuppressWarnings("rawtypes")
// Enumeration enumComm;
//
// enumComm = CommPortIdentifier.getPortIdentifiers();
//
// while(enumComm.hasMoreElements())
// {
// serialPortId = (CommPortIdentifier)enumComm.nextElement();
// if(serialPortId.getPortType() == CommPortIdentifier.PORT_SERIAL)
// {
// System.out.println(serialPortId.getName());
// }
// }
//
// System.out.println("Program Finished Sucessfully");
// }
}
[/CODE]

Alles klar, mir fällt gerade auf, dass ich die Abfrage vom InputStream gar nicht eingebaut habe, weil ich davor nicht wusste, wo genau ich die abfragen muss. :)

Also die Verbindung mit dem Switch und das Senden von Befehlen klappt ja an sich schon. Kann es ja an dem Serial Port Monitor sowie dem Switch selbst sehen (LEDs werden aktiv). Nur die Abfrage vom Input des Switches fehlt.

Danke für den "Zippen-Tipp". Bin noch relativ neu in Java und muss noch viel lernen. :)
 
G

Gelöschtes Mitglied 65862

Gast
Äh, das war eigentlich auf das Forum bezogen: Du kannst hier auch ZIP-Files anhängen :)


Bist Du sicher? Ich hätte hier RTS/CTS oder DTR/DSR erwartet.

Nachtrag: und ja, schmeiß die RXTX-Pakete raus.
Okay, dann weiß ich Bescheid. :)

Ne, bin mir ziemlich sicher, dass die Flusssteuerung deaktiviert sein muss. Hab ja bei der Arbeit schon einige Switche mithilfe von HyperTerminal bespielt und hier war nie eine Flusssteuerung aktiv.

Alles klar, mach ich dann gleich mal.

Kleiner Nachtrag:
[CODE lang="java" title="Neuer Error"] public void connect(String COM3) throws IOException
{
try
{
// Obtain a CommPortIdentifier object for the port you want to open
//CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM3");
SerialPort serialPort = SerialPort.getCommPorts()[0];

if (serialPort.isOpen())
{
System.err.println("Error: Sie sind bereits mit dem COM3-Port verbunden!");
}
else
{
// Get the port's ownership
serialPort.openPort();
//serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 0, 0);

// Set the parameters of the connection.
setSerialPortParameters();

// Open the input and output streams for the connection. If they won't
// open, close the port before throwing an exception.
outStream = serialPort.getOutputStream();
inStream = serialPort.getInputStream();

//EventListener
serialPort.addDataListener(new SerialInput(inStream));

// Hinweisen, wenn Daten vorhanden sind
//serialPort.notifyOnDataAvailable(true);
System.out.println("Verbindung zum COM3-Port hergestellt!\n");
}
}
catch (IOException e)
{
serialPort.closePort();
throw e;
}
}[/CODE]

Seitdem ich den Quellcode hier gestern an jSerialComm angepasst habe, wird mir nicht mehr der ursprüngliche Error "The read operation timed out before any data was returned." angezeigt, sondern dass der Port entweder geschlossen oder disconnected ist.
 
G

Gelöschtes Mitglied 65862

Gast
Entfern hier mal das SerialPort am Anfang. Du deklarierst hier eine lokale Variale, die somit die Instanzvariable versteckt. Das kann ein Problem sein.
Zunächst möchte ich mich entschuldigen, dass ich mich die letzten Tage nicht gemeldet habe. Hatte leider ziemlich viel um die Ohren.

Im Anschluss will ich mich für die Verbesserung oben bedanken. Somit wurde der Error behoben, sodass ich nun wieder beim Alten "The read operation timed out before any data was returned." angekommen bin :(

[CODE lang="java" title="Flusskontrolle"]serialPort.setFlowControl(SerialPort.FLOW_CONTROL_DTR_ENABLED | SerialPort.FLOW_CONTROL_DSR_ENABLED);[/CODE]
Ich hab zur Sicherheit die Flusskontrolle natürlich nochmal angepasst und getestet, allerdings leider auch ohne Erfolg.

Ich würde es gerne nochmal mit dem InputStream versuchen und schauen, ob mir dieser hilft, die Signale vom Switch zu erhalten. Diesen habe ich ja in mein Skript zur Verbindungsherstellung mit dem Switch nicht eingebaut. Würdest Du sagen, dass es daran liegen kann, dass das "C" nicht erkannt wird?

Vielen Dank für die Hilfe :)
 

mihe7

Top Contributor
Diesen habe ich ja in mein Skript zur Verbindungsherstellung mit dem Switch nicht eingebaut.
?!?

Du musst schauen, dass Du ein einfaches Beispiel (wie z. B. unter https://github.com/Fazecast/jSerial...am-and-OutputStream-Interfacing-Usage-Example) ans Laufen bekommst. Das kannst Du ja unabhängig von Deinem Code machen und dann darauf aufbauen. Evtl. musst Du das Beispiel noch um eine Ausgabe erweitern, damit Du was empfängst aber vom Grundsatz her sollte nicht mehr notwendig sein.
 
G

Gelöschtes Mitglied 65862

Gast
?!?

Du musst schauen, dass Du ein einfaches Beispiel (wie z. B. unter https://github.com/Fazecast/jSerial...am-and-OutputStream-Interfacing-Usage-Example) ans Laufen bekommst. Das kannst Du ja unabhängig von Deinem Code machen und dann darauf aufbauen. Evtl. musst Du das Beispiel noch um eine Ausgabe erweitern, damit Du was empfängst aber vom Grundsatz her sollte nicht mehr notwendig sein.
[CODE lang="java" title="Code"]public void connect(String COM3) throws IOException
{
try
{
// Obtain a CommPortIdentifier object for the port you want to open
//CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM3");
serialPort = SerialPort.getCommPorts()[0];

if (serialPort.isOpen())
{
System.err.println("Error: Sie sind bereits mit dem COM3-Port verbunden!");
}
else
{
// Get the port's ownership
serialPort.openPort();
serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 0, 0);

// Set the parameters of the connection.
setSerialPortParameters();

// Open the input and output streams for the connection. If they won't
// open, close the port before throwing an exception.
outStream = serialPort.getOutputStream();
inStream = serialPort.getInputStream();
try
{
for (int j = 0; j < 1000; ++j)
System.out.print((char)inStream.read());
inStream.close();
}
catch (Exception e)
{
e.printStackTrace();
}

//EventListener
serialPort.addDataListener(new SerialInput(inStream));

// Hinweisen, wenn Daten vorhanden sind
//serialPort.notifyOnDataAvailable(true);
System.out.println("Verbindung zum COM3-Port hergestellt!\n");
}
}
catch (IOException e)
{
serialPort.closePort();
throw e;
}
}[/CODE]

Okay, hab gerade mal versucht den InputStream einzubauen. An sich hat der Quellcode funktioniert, nur leider "freezed" mein Programm, wenn ich die Verbindung zum Switch herstellen und die Bespielung starten will.

Im Anschluss habe ich es dann nochmal ohne den Input versucht und wie es ausschaut, wird der Inhalt des Konfigurationstemplates übermittelt. Nur wie man erkennen kann, wird das Template total durcheinander und mit Sonderzeichen importiert.
Ab einem Punkt wird der Inhalt der Datei dann in die Eingabezeilen eingefügt.
 
Zuletzt bearbeitet von einem Moderator:

mihe7

Top Contributor
Okay, hab gerade mal versucht den InputStream einzubauen. An sich hat der Quellcode funktioniert, nur leider "freezed" mein Programm, wenn ich die Verbindung zum Switch herstellen und die Bespielung starten will.
D. h. die Verbindung hat geklappt, der Switch hat Dir irgendwas gesendet, was Dir auch auf dem Bildschirm ausgegeben wurde, dann hängt Dein Programm, weil es auf weitere Daten wartet, der Switch aber keine mehr sendet?

Zu der oben angefügten Config.txt: ist das die, die Du an den Switch übermittelst oder ist das die, die Du aus dem Switch erstellt hast?
 

mihe7

Top Contributor
So, jetzt habe ich mal (quick & very dirty) den Spaß nachgebaut (s. Anhang). Ausgeführt werden muss die Klasse Test mit zwei Parametern: 1. der String des Com-Ports, 2. Name der zu sendenden Datei.

Getestet habe ich das unter Linux:
  1. Mit socat -d -d pty,raw,echo=0 pty,raw,echo=0 virtuelle Com-Ports eingerichtet, bei mir waren das /dev/pts/10 und /dev/pts/15.
  2. Empfänger mit rx -Xc test < /dev/pts/15 > /dev/pts/15 gestartet.
  3. Sender mit mvn compile exec:java -Dexec.mainClass=Test -Dexec.args="/dev/pts/10 pom.xml" gestartet (ich habe mal die pom.xml übertragen).
Ausgabe von rx:
Code:
rx: bereit zum Empfangen von test
Bytes empfangen:    1024   BPS:106                  

Übertragung abgeschlossen

Ausgabe des "Tools":
Code:
Starting xfer
01 01 fe 3c 70 72 6f 6a 65 63 74 20 78 6d 6c 6e
73 3d 22 68 74 74 70 3a 2f 2f 6d 61 76 65 6e 2e
61 70 61 63 68 65 2e 6f 72 67 2f 50 4f 4d 2f 34
2e 30 2e 30 22 20 78 6d 6c 6e 73 3a 78 73 69 3d
22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f
72 67 2f 32 30 30 31 2f 58 4d 4c 53 63 68 65 6d
61 2d 69 6e 73 74 61 6e 63 65 22 0a 20 20 20 20
20 20 20 20 20 78 73 69 3a 73 63 68 65 6d 61 4c
6f 63 61 83 4d
01 02 fd 74 69 6f 6e 3d 22 68 74 74 70 3a 2f 2f
6d 61 76 65 6e 2e 61 70 61 63 68 65 2e 6f 72 67
2f 50 4f 4d 2f 34 2e 30 2e 30 20 68 74 74 70 3a
2f 2f 6d 61 76 65 6e 2e 61 70 61 63 68 65 2e 6f
72 67 2f 78 73 64 2f 6d 61 76 65 6e 2d 34 2e 30
2e 30 2e 78 73 64 22 3e 0a 20 20 20 20 3c 6d 6f
64 65 6c 56 65 72 73 69 6f 6e 3e 34 2e 30 2e 30
3c 2f 6d 6f 64 65 6c 56 65 72 73 69 6f 6e 3e 0a
20 20 20 43 e5
01 03 fc 20 3c 67 72 6f 75 70 49 64 3e 6f 72 67
2e 6a 61 76 61 66 6f 72 75 6d 2e 6d 69 68 65 37
3c 2f 67 72 6f 75 70 49 64 3e 0a 20 20 20 20 3c
61 72 74 69 66 61 63 74 49 64 3e 78 6d 6f 64 65
6d 3c 2f 61 72 74 69 66 61 63 74 49 64 3e 0a 20
20 20 20 3c 76 65 72 73 69 6f 6e 3e 31 2e 30 2d
53 4e 41 50 53 48 4f 54 3c 2f 76 65 72 73 69 6f
6e 3e 0a 20 20 20 20 3c 70 61 63 6b 61 67 69 6e
67 3e 6a c0 0d
01 04 fb 61 72 3c 2f 70 61 63 6b 61 67 69 6e 67
3e 0a 20 20 20 20 3c 64 65 70 65 6e 64 65 6e 63
69 65 73 3e 0a 20 20 20 20 20 20 20 20 3c 64 65
70 65 6e 64 65 6e 63 79 3e 0a 20 20 20 20 20 20
20 20 20 20 3c 67 72 6f 75 70 49 64 3e 63 6f 6d
2e 66 61 7a 65 63 61 73 74 3c 2f 67 72 6f 75 70
49 64 3e 0a 20 20 20 20 20 20 20 20 20 20 3c 61
72 74 69 66 61 63 74 49 64 3e 6a 53 65 72 69 61
6c 43 6f 5f f4
01 05 fa 6d 6d 3c 2f 61 72 74 69 66 61 63 74 49
64 3e 0a 20 20 20 20 20 20 20 20 20 20 3c 76 65
72 73 69 6f 6e 3e 32 2e 36 2e 32 3c 2f 76 65 72
73 69 6f 6e 3e 0a 20 20 20 20 20 20 20 20 3c 2f
64 65 70 65 6e 64 65 6e 63 79 3e 0a 20 20 20 20
20 20 20 20 3c 64 65 70 65 6e 64 65 6e 63 79 3e
0a 20 20 20 20 20 20 20 20 20 20 3c 67 72 6f 75
70 49 64 3e 6a 75 6e 69 74 3c 2f 67 72 6f 75 70
49 64 3e d0 42
01 06 f9 0a 20 20 20 20 20 20 20 20 20 20 3c 61
72 74 69 66 61 63 74 49 64 3e 6a 75 6e 69 74 3c
2f 61 72 74 69 66 61 63 74 49 64 3e 0a 20 20 20
20 20 20 20 20 20 20 3c 76 65 72 73 69 6f 6e 3e
34 2e 31 32 3c 2f 76 65 72 73 69 6f 6e 3e 0a 20
20 20 20 20 20 20 20 20 20 3c 73 63 6f 70 65 3e
74 65 73 74 3c 2f 73 63 6f 70 65 3e 0a 20 20 20
20 20 20 20 20 3c 2f 64 65 70 65 6e 64 65 6e 63
79 3e 0a ec 71
01 07 f8 20 20 20 20 3c 2f 64 65 70 65 6e 64 65
6e 63 69 65 73 3e 0a 20 20 20 20 3c 70 72 6f 70
65 72 74 69 65 73 3e 0a 20 20 20 20 20 20 20 20
3c 6d 61 76 65 6e 2e 63 6f 6d 70 69 6c 65 72 2e
73 6f 75 72 63 65 3e 31 2e 38 3c 2f 6d 61 76 65
6e 2e 63 6f 6d 70 69 6c 65 72 2e 73 6f 75 72 63
65 3e 0a 20 20 20 20 20 20 20 20 3c 6d 61 76 65
6e 2e 63 6f 6d 70 69 6c 65 72 2e 74 61 72 67 65
74 3e 31 d7 97
01 08 f7 2e 38 3c 2f 6d 61 76 65 6e 2e 63 6f 6d
70 69 6c 65 72 2e 74 61 72 67 65 74 3e 0a 20 20
20 20 3c 2f 70 72 6f 70 65 72 74 69 65 73 3e 0a
3c 2f 70 72 6f 6a 65 63 74 3e 0a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 6f 3b
Done, sending EOT
Grob funktioniert das.
 

Anhänge

  • xmodem.zip
    4,2 KB · Aufrufe: 3
G

Gelöschtes Mitglied 65862

Gast
D. h. die Verbindung hat geklappt, der Switch hat Dir irgendwas gesendet, was Dir auch auf dem Bildschirm ausgegeben wurde, dann hängt Dein Programm, weil es auf weitere Daten wartet, der Switch aber keine mehr sendet?

Zu der oben angefügten Config.txt: ist das die, die Du an den Switch übermittelst oder ist das die, die Du aus dem Switch erstellt hast?
Naja, also sobald ich auf den Button Bespielung starten drücke, freezed das Programm sofort und der Button wird so angezeigt, als würde ich durchgehend darauf drücken. In dem Fall passiert nichts mehr... Keine Ausgabe gar nichts.

Zu der Config.txt: Was man in der Config sieht, ist das Template, was der Switch von meinem Programm zugesendet bekommt. Allerdings ist es wie bereits erwähnt total durcheinander und enthält Sonderzeichen, die eig. gar nicht da sein sollten. Zudem werden Abschnitte mehrfach ausgegeben, was ebenfalls nicht der Fall sein sollte.
 
G

Gelöschtes Mitglied 65862

Gast
So, jetzt habe ich mal (quick & very dirty) den Spaß nachgebaut (s. Anhang). Ausgeführt werden muss die Klasse Test mit zwei Parametern: 1. der String des Com-Ports, 2. Name der zu sendenden Datei.

Getestet habe ich das unter Linux:
  1. Mit socat -d -d pty,raw,echo=0 pty,raw,echo=0 virtuelle Com-Ports eingerichtet, bei mir waren das /dev/pts/10 und /dev/pts/15.
  2. Empfänger mit rx -Xc test < /dev/pts/15 > /dev/pts/15 gestartet.
  3. Sender mit mvn compile exec:java -Dexec.mainClass=Test -Dexec.args="/dev/pts/10 pom.xml" gestartet (ich habe mal die pom.xml übertragen).
Ausgabe von rx:
Code:
rx: bereit zum Empfangen von test
Bytes empfangen:    1024   BPS:106                 

Übertragung abgeschlossen

Ausgabe des "Tools":
Code:
Starting xfer
01 01 fe 3c 70 72 6f 6a 65 63 74 20 78 6d 6c 6e
73 3d 22 68 74 74 70 3a 2f 2f 6d 61 76 65 6e 2e
61 70 61 63 68 65 2e 6f 72 67 2f 50 4f 4d 2f 34
2e 30 2e 30 22 20 78 6d 6c 6e 73 3a 78 73 69 3d
22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f
72 67 2f 32 30 30 31 2f 58 4d 4c 53 63 68 65 6d
61 2d 69 6e 73 74 61 6e 63 65 22 0a 20 20 20 20
20 20 20 20 20 78 73 69 3a 73 63 68 65 6d 61 4c
6f 63 61 83 4d
01 02 fd 74 69 6f 6e 3d 22 68 74 74 70 3a 2f 2f
6d 61 76 65 6e 2e 61 70 61 63 68 65 2e 6f 72 67
2f 50 4f 4d 2f 34 2e 30 2e 30 20 68 74 74 70 3a
2f 2f 6d 61 76 65 6e 2e 61 70 61 63 68 65 2e 6f
72 67 2f 78 73 64 2f 6d 61 76 65 6e 2d 34 2e 30
2e 30 2e 78 73 64 22 3e 0a 20 20 20 20 3c 6d 6f
64 65 6c 56 65 72 73 69 6f 6e 3e 34 2e 30 2e 30
3c 2f 6d 6f 64 65 6c 56 65 72 73 69 6f 6e 3e 0a
20 20 20 43 e5
01 03 fc 20 3c 67 72 6f 75 70 49 64 3e 6f 72 67
2e 6a 61 76 61 66 6f 72 75 6d 2e 6d 69 68 65 37
3c 2f 67 72 6f 75 70 49 64 3e 0a 20 20 20 20 3c
61 72 74 69 66 61 63 74 49 64 3e 78 6d 6f 64 65
6d 3c 2f 61 72 74 69 66 61 63 74 49 64 3e 0a 20
20 20 20 3c 76 65 72 73 69 6f 6e 3e 31 2e 30 2d
53 4e 41 50 53 48 4f 54 3c 2f 76 65 72 73 69 6f
6e 3e 0a 20 20 20 20 3c 70 61 63 6b 61 67 69 6e
67 3e 6a c0 0d
01 04 fb 61 72 3c 2f 70 61 63 6b 61 67 69 6e 67
3e 0a 20 20 20 20 3c 64 65 70 65 6e 64 65 6e 63
69 65 73 3e 0a 20 20 20 20 20 20 20 20 3c 64 65
70 65 6e 64 65 6e 63 79 3e 0a 20 20 20 20 20 20
20 20 20 20 3c 67 72 6f 75 70 49 64 3e 63 6f 6d
2e 66 61 7a 65 63 61 73 74 3c 2f 67 72 6f 75 70
49 64 3e 0a 20 20 20 20 20 20 20 20 20 20 3c 61
72 74 69 66 61 63 74 49 64 3e 6a 53 65 72 69 61
6c 43 6f 5f f4
01 05 fa 6d 6d 3c 2f 61 72 74 69 66 61 63 74 49
64 3e 0a 20 20 20 20 20 20 20 20 20 20 3c 76 65
72 73 69 6f 6e 3e 32 2e 36 2e 32 3c 2f 76 65 72
73 69 6f 6e 3e 0a 20 20 20 20 20 20 20 20 3c 2f
64 65 70 65 6e 64 65 6e 63 79 3e 0a 20 20 20 20
20 20 20 20 3c 64 65 70 65 6e 64 65 6e 63 79 3e
0a 20 20 20 20 20 20 20 20 20 20 3c 67 72 6f 75
70 49 64 3e 6a 75 6e 69 74 3c 2f 67 72 6f 75 70
49 64 3e d0 42
01 06 f9 0a 20 20 20 20 20 20 20 20 20 20 3c 61
72 74 69 66 61 63 74 49 64 3e 6a 75 6e 69 74 3c
2f 61 72 74 69 66 61 63 74 49 64 3e 0a 20 20 20
20 20 20 20 20 20 20 3c 76 65 72 73 69 6f 6e 3e
34 2e 31 32 3c 2f 76 65 72 73 69 6f 6e 3e 0a 20
20 20 20 20 20 20 20 20 20 3c 73 63 6f 70 65 3e
74 65 73 74 3c 2f 73 63 6f 70 65 3e 0a 20 20 20
20 20 20 20 20 3c 2f 64 65 70 65 6e 64 65 6e 63
79 3e 0a ec 71
01 07 f8 20 20 20 20 3c 2f 64 65 70 65 6e 64 65
6e 63 69 65 73 3e 0a 20 20 20 20 3c 70 72 6f 70
65 72 74 69 65 73 3e 0a 20 20 20 20 20 20 20 20
3c 6d 61 76 65 6e 2e 63 6f 6d 70 69 6c 65 72 2e
73 6f 75 72 63 65 3e 31 2e 38 3c 2f 6d 61 76 65
6e 2e 63 6f 6d 70 69 6c 65 72 2e 73 6f 75 72 63
65 3e 0a 20 20 20 20 20 20 20 20 3c 6d 61 76 65
6e 2e 63 6f 6d 70 69 6c 65 72 2e 74 61 72 67 65
74 3e 31 d7 97
01 08 f7 2e 38 3c 2f 6d 61 76 65 6e 2e 63 6f 6d
70 69 6c 65 72 2e 74 61 72 67 65 74 3e 0a 20 20
20 20 3c 2f 70 72 6f 70 65 72 74 69 65 73 3e 0a
3c 2f 70 72 6f 6a 65 63 74 3e 0a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 6f 3b
Done, sending EOT
Grob funktioniert das.
Alles klar, ich schau mir das gleich mal an.

Vielen Dank für die enorme Hilf :)
 
G

Gelöschtes Mitglied 65862

Gast
So, jetzt habe ich mal (quick & very dirty) den Spaß nachgebaut (s. Anhang). Ausgeführt werden muss die Klasse Test mit zwei Parametern: 1. der String des Com-Ports, 2. Name der zu sendenden Datei.

Getestet habe ich das unter Linux:
  1. Mit socat -d -d pty,raw,echo=0 pty,raw,echo=0 virtuelle Com-Ports eingerichtet, bei mir waren das /dev/pts/10 und /dev/pts/15.
  2. Empfänger mit rx -Xc test < /dev/pts/15 > /dev/pts/15 gestartet.
  3. Sender mit mvn compile exec:java -Dexec.mainClass=Test -Dexec.args="/dev/pts/10 pom.xml" gestartet (ich habe mal die pom.xml übertragen).
Ausgabe von rx:
Code:
rx: bereit zum Empfangen von test
Bytes empfangen:    1024   BPS:106                 

Übertragung abgeschlossen

Ausgabe des "Tools":
Code:
Starting xfer
01 01 fe 3c 70 72 6f 6a 65 63 74 20 78 6d 6c 6e
73 3d 22 68 74 74 70 3a 2f 2f 6d 61 76 65 6e 2e
61 70 61 63 68 65 2e 6f 72 67 2f 50 4f 4d 2f 34
2e 30 2e 30 22 20 78 6d 6c 6e 73 3a 78 73 69 3d
22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 2e 6f
72 67 2f 32 30 30 31 2f 58 4d 4c 53 63 68 65 6d
61 2d 69 6e 73 74 61 6e 63 65 22 0a 20 20 20 20
20 20 20 20 20 78 73 69 3a 73 63 68 65 6d 61 4c
6f 63 61 83 4d
01 02 fd 74 69 6f 6e 3d 22 68 74 74 70 3a 2f 2f
6d 61 76 65 6e 2e 61 70 61 63 68 65 2e 6f 72 67
2f 50 4f 4d 2f 34 2e 30 2e 30 20 68 74 74 70 3a
2f 2f 6d 61 76 65 6e 2e 61 70 61 63 68 65 2e 6f
72 67 2f 78 73 64 2f 6d 61 76 65 6e 2d 34 2e 30
2e 30 2e 78 73 64 22 3e 0a 20 20 20 20 3c 6d 6f
64 65 6c 56 65 72 73 69 6f 6e 3e 34 2e 30 2e 30
3c 2f 6d 6f 64 65 6c 56 65 72 73 69 6f 6e 3e 0a
20 20 20 43 e5
01 03 fc 20 3c 67 72 6f 75 70 49 64 3e 6f 72 67
2e 6a 61 76 61 66 6f 72 75 6d 2e 6d 69 68 65 37
3c 2f 67 72 6f 75 70 49 64 3e 0a 20 20 20 20 3c
61 72 74 69 66 61 63 74 49 64 3e 78 6d 6f 64 65
6d 3c 2f 61 72 74 69 66 61 63 74 49 64 3e 0a 20
20 20 20 3c 76 65 72 73 69 6f 6e 3e 31 2e 30 2d
53 4e 41 50 53 48 4f 54 3c 2f 76 65 72 73 69 6f
6e 3e 0a 20 20 20 20 3c 70 61 63 6b 61 67 69 6e
67 3e 6a c0 0d
01 04 fb 61 72 3c 2f 70 61 63 6b 61 67 69 6e 67
3e 0a 20 20 20 20 3c 64 65 70 65 6e 64 65 6e 63
69 65 73 3e 0a 20 20 20 20 20 20 20 20 3c 64 65
70 65 6e 64 65 6e 63 79 3e 0a 20 20 20 20 20 20
20 20 20 20 3c 67 72 6f 75 70 49 64 3e 63 6f 6d
2e 66 61 7a 65 63 61 73 74 3c 2f 67 72 6f 75 70
49 64 3e 0a 20 20 20 20 20 20 20 20 20 20 3c 61
72 74 69 66 61 63 74 49 64 3e 6a 53 65 72 69 61
6c 43 6f 5f f4
01 05 fa 6d 6d 3c 2f 61 72 74 69 66 61 63 74 49
64 3e 0a 20 20 20 20 20 20 20 20 20 20 3c 76 65
72 73 69 6f 6e 3e 32 2e 36 2e 32 3c 2f 76 65 72
73 69 6f 6e 3e 0a 20 20 20 20 20 20 20 20 3c 2f
64 65 70 65 6e 64 65 6e 63 79 3e 0a 20 20 20 20
20 20 20 20 3c 64 65 70 65 6e 64 65 6e 63 79 3e
0a 20 20 20 20 20 20 20 20 20 20 3c 67 72 6f 75
70 49 64 3e 6a 75 6e 69 74 3c 2f 67 72 6f 75 70
49 64 3e d0 42
01 06 f9 0a 20 20 20 20 20 20 20 20 20 20 3c 61
72 74 69 66 61 63 74 49 64 3e 6a 75 6e 69 74 3c
2f 61 72 74 69 66 61 63 74 49 64 3e 0a 20 20 20
20 20 20 20 20 20 20 3c 76 65 72 73 69 6f 6e 3e
34 2e 31 32 3c 2f 76 65 72 73 69 6f 6e 3e 0a 20
20 20 20 20 20 20 20 20 20 3c 73 63 6f 70 65 3e
74 65 73 74 3c 2f 73 63 6f 70 65 3e 0a 20 20 20
20 20 20 20 20 3c 2f 64 65 70 65 6e 64 65 6e 63
79 3e 0a ec 71
01 07 f8 20 20 20 20 3c 2f 64 65 70 65 6e 64 65
6e 63 69 65 73 3e 0a 20 20 20 20 3c 70 72 6f 70
65 72 74 69 65 73 3e 0a 20 20 20 20 20 20 20 20
3c 6d 61 76 65 6e 2e 63 6f 6d 70 69 6c 65 72 2e
73 6f 75 72 63 65 3e 31 2e 38 3c 2f 6d 61 76 65
6e 2e 63 6f 6d 70 69 6c 65 72 2e 73 6f 75 72 63
65 3e 0a 20 20 20 20 20 20 20 20 3c 6d 61 76 65
6e 2e 63 6f 6d 70 69 6c 65 72 2e 74 61 72 67 65
74 3e 31 d7 97
01 08 f7 2e 38 3c 2f 6d 61 76 65 6e 2e 63 6f 6d
70 69 6c 65 72 2e 74 61 72 67 65 74 3e 0a 20 20
20 20 3c 2f 70 72 6f 70 65 72 74 69 65 73 3e 0a
3c 2f 70 72 6f 6a 65 63 74 3e 0a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a 1a
1a 1a 1a 6f 3b
Done, sending EOT
Grob funktioniert das.

Ich hab mir Deinen Code gerade mal angeschaut und zum Teil schonmal verstanden. Allerdings verstehe ich die Funktion eines Abschnitts nicht ganz. Kannst Du mir den vlt. etwas genauer erklären? :)

[CODE lang="java" title="Abschnitt"]private void send(byte[] buf, int block) throws IOException {
if (buf == null) {
System.out.printf("Done, sending EOT\n");
out.write(EOT);
state = EOF;
} else {
byte[] nbuf = new byte[buf.length+5];
nbuf[0] = SOH;
nbuf[1] = (byte) block;
nbuf[2] = (byte) ~nbuf[1];
System.arraycopy(buf, 0, nbuf, 3, buf.length);
CRC16 crc = new CRC16().update(buf);
nbuf[nbuf.length-2] = crc.hiByte();
nbuf[nbuf.length-1] = crc.loByte();
out.write(nbuf);
out.flush();

for (int i = 0; i < nbuf.length; i++) {
System.out.printf("%02x ", nbuf);
if ((i+1) % 16 == 0) {
System.out.println();
}
}
System.out.println();

state = SENDING;
}
}[/CODE]

Der erste Teil ist soweit klar.
Sobald die zu sendenden Daten gleich null sind (keine mehr vorliegen), wird "Done" ausgegeben. Nun verstehe ich nur die Else-Verzweigung nicht. :)
 

mihe7

Top Contributor
Zeilen 7 bis 14 erstellen ein byte-Array, das alles enthält, was zu senden ist: SOH, Blocknummer, Komplement der Blocknummer, die 128-Bytes Daten und die CRC-Prüfsumme. Mit 15/16 wird der Spaß rausgeschrieben (gesendet). 18 bis 24 dient einfach der Hex-Ausagabe der gesendeten Daten, wie Du sie in Kommentar #21 siehst.
 
G

Gelöschtes Mitglied 65862

Gast
Ach, und noch was: es wird vor allem ein EOT gesendet :)
Okay, ich hab es gerade nochmal versucht und aktuell würde ich sagen, dass die Config durch ist. Ich hab den Switch nochmal per HyperTerminal gebootet und wie man auf dem Screenshot sieht, hat er jetzt den Namen, der in der Textdatei (dem Konfigurationstemplate) hinterlegt war.

1615636035382.png

Allerdings muss ich das ganze natürlich nochmal genauer mit einem Kollegen testen.

Weiterhin sind mir zwei Unstimmigkeiten aufgefallen.

Ich habe mich mal von deinem Code inspirieren lassen und den genutzt. :) Starte ich nun die Grundkonfiguration des Switches, werden mir die abgearbeiteten Schritte des Switches nicht mehr in Klartext, sondern in, ich tippe mal ASCII-Code, dargestellt.

Vorher:
Base ethernet MAC Address : BC:C4:93:8E:6F:00
Motherboard assembly number : 73-15620-01
Power supply part number : 341-0097-03
Motherboard serial number : FOC191340W7
Power supply serial number : DCA190783C7
Model revision number : B0
Motherboard revision number : B0
Model number : WS-C2960+24TC-L
System serial number : FOC1914S2YG
Top Assembly Part Number : 800-40261-01
Top Assembly Revision Number : B0
Version ID : V01
CLEI Code Number : CMMKV00ARA
Hardware Board Revision Number : 0x0B


Switch Ports Model SW Version SW Image
------ ----- ----- ---------- ----------
* 1 26 WS-C2960+24TC-L 15.0(2)SE7 C2960-LANBASEK9-M

Nachher:
xxøø€øø€øx€ø.€øx.€xx.€x.xø€øø€x.xø€ø€.€.xøøø€€ø.øøxøø€xx€øø.ø.€x€øx€øxøøøøø€€øxø.€.xøx€øø€ø.øøø€ø.€€ø€.€€.øx€øø€øxøø€øøx.€x.xø€øø€x.xø€ø€.€.xøøø€€ø.øøxøø€xx€øø.ø.€x€øx€øxøøøøø€€øxø.€.xøx€øø€ø.øøø€ø.€€ø€.€x.ø€øø.€ø.x.€ø€x.øøxø.øøxøøø€ø.€.xxøø€øø€øx€ø.€øx.€xx.€x.xø€øø€x.xø€ø€.€ø.ø.xxxø.€x€øx€øø.ø.€xøø€øø.øøx€ø€€ø€€øxøø.øx€ø.€.€øøøøøøø.ø€.øxøø.øøxø.€.xøx€øø€ø.øøø€ø.€€ø€.€€.øx€øø€øxøø€øøx.€x.xø€øø€x.xø€ø€.€ø.ø.xxxø.€x€øx€øø.ø.€xøø€øø.øøx€ø€€ø€€øxøø.øx€ø.

Zudem ist es so, dass das Senden der Config-Datei beim ersten Mal zu viele Trys benötigt. Starte ich die Übertragung dann erneut, startet diese nach dem vierten Try erfolgreich.

Edit: Zudem werden beim Sendevorgang der Config zur Zeit immer noch Sonderzeichen hinzugefügt, wie ich es bereits in einer vorherigen Antwort erwähnt habe. Aus dem Grund gehe ich natürlich aktuell davon aus, dass der Switch mit dieser Config nicht funktionieren wird.

Aus diesem Grund wollte ich mal fragen, ob du vlt. weißt, woran beide "Probleme" liegen können.
Diesmal hab ich die Klassen natürlich als .zip mit angehangen. :)

Und ich möchte Dir erneut vielmals für deine starke Hilfe danken. :)
 

Anhänge

  • Projekt-Backup.zip
    8,9 KB · Aufrufe: 0
Zuletzt bearbeitet von einem Moderator:

mihe7

Top Contributor
Ich habe mich mal von deinem Code inspirieren lassen und den genutzt. :) Starte ich nun die Grundkonfiguration des Switches, werden mir die abgearbeiteten Schritte des Switches nicht mehr in Klartext, sondern in, ich tippe mal ASCII-Code, dargestellt.
Ich wiederhole mich: ich habe das wirklich nur auf die Schnelle zusammengeschustert, das ist kein guter Code :)

Klartext wäre ASCII-Code. Evtl. erwartet der Switch am Dateiende ein anderes Zeichen? Du kannst ja mal z. B. mit EOT oder NUL auffüllen.

Zudem ist es so, dass das Senden der Config-Datei beim ersten Mal zu viele Trys benötigt.
Mit welcher Begründung? Timeout?

Wenn ich drandenke, schau ich später mal in den Code rein.
 
G

Gelöschtes Mitglied 65862

Gast
Ich wiederhole mich: ich habe das wirklich nur auf die Schnelle zusammengeschustert, das ist kein guter Code :)

Klartext wäre ASCII-Code. Evtl. erwartet der Switch am Dateiende ein anderes Zeichen? Du kannst ja mal z. B. mit EOT oder NUL auffüllen.


Mit welcher Begründung? Timeout?

Wenn ich drandenke, schau ich später mal in den Code rein.
Tut mir Leid, dass es etwas ruhig war, aber ich hatte in den letzten Tagen einige Prüfungen.

Es wird nicht genau gesagt, warum zu viele Trys benötigt werden. Es wird immer nur zum 10. Try gezählt und dann bleibt es dabei. Es wird kein Fehler angezeigt.

[CODE lang="java" title="Code_Abschnitt" highlight="2"] private int receive() throws IOException {
int tries = 20;
while (tries > 0 && in.available() <= 0) {
tries--;
sleep(100);
}
if (in.available() > 0) {
in.skip(in.available()-1);
return in.read();
}
return -1;
}[/CODE]
Ich hab zum testen die Anzahl der Tries mal von 10 auf 20 erhöht und bei dem darauffolgenden Test ist die Übertragung erst beim 16 Versuch gestartet. Also wie man sieht variiert die Anzahl der Tries immer wieder. :)

Viele Grüße
 

mihe7

Top Contributor
Ach, an der Stelle. Ja, das kann durchaus sein. Ich weiß jetzt nicht genau, ob und welches Timeout in Xmodem vorgesehen ist, aber ich meine etwas von 10 s im Kopf zu haben. Das habe ich nur eingebaut, damit die Methode überhaupt wieder verlassen wird, wenn nichts ankommt - theoretisch kannst Du auch einfach blockierend lesen.
 
G

Gelöschtes Mitglied 65862

Gast
Ach, an der Stelle. Ja, das kann durchaus sein. Ich weiß jetzt nicht genau, ob und welches Timeout in Xmodem vorgesehen ist, aber ich meine etwas von 10 s im Kopf zu haben. Das habe ich nur eingebaut, damit die Methode überhaupt wieder verlassen wird, wenn nichts ankommt - theoretisch kannst Du auch einfach blockierend lesen.
Alles klar. Ich belasse die Trys einfach mal bei 20, weil der InputStream sowieso meistens zwischen Try 15 und 20 startet.

Leider konnte ich noch nicht genau herausfinden, warum die Grundkonfiguration nicht mehr im Klartext angezeigt wird, sondern nur noch in Sonderzeichen. Sry, dass ich da nochmal nachfrage, aber weißt Du vlt., woran das liegen kann? :)

Viele Grüße
 

mihe7

Top Contributor
Keine Ahnung, evtl. irgendwas in den vielen Versuchen zerschossen? Kannst Du das durch einen erneuen Upload via z. B. Hyper Terminal beheben?
 
G

Gelöschtes Mitglied 65862

Gast
Keine Ahnung, evtl. irgendwas in den vielen Versuchen zerschossen? Kannst Du das durch einen erneuen Upload via z. B. Hyper Terminal beheben?
Ich glaube da gab es ein Missverständnis. Es ist so, dass ich den InputStream vom Switch, den ich mir mit einem SerialPort Reader anzeigen lasse, nicht mehr im Klartext angezeigt bekomme. Der Rest
 
G

Gelöschtes Mitglied 65862

Gast
Ach, so. Filtere halt mal alle Steuerzeichen raus.
Okay, also wie es scheint funktioniert nun alles. Ich dank dir für die ganze Hilfe Mihe :)

Ich hätte zum gleichen Projekt noch eine andere Frage. Kann ich die hier stellen oder soll ich dafür ein eigenes Thema erstellen?

Viele Grüße
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Datei kodiert zu Webservice senden Allgemeine Java-Themen 9
kodela StatusBar-Anzeigen auch in Log-Datei ausgeben Allgemeine Java-Themen 3
G Maven Projekt JAR-Datei Allgemeine Java-Themen 6
E XML - Datei Darstellung in IntelliJ als Baum Allgemeine Java-Themen 2
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
D Erste Schritte Mp3 Datei kann nicht von der Festplatte geöffnet werden - mit ChatGPT erstellt Allgemeine Java-Themen 7
J Filenotfoundexception obwohl Datei existiert Allgemeine Java-Themen 6
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
E Datei verschoben Event Allgemeine Java-Themen 3
D Datei mit "Kohsuke GitHub API" in Repository hochladen Allgemeine Java-Themen 2
S Bookmark HTML Datei einlesen, alle Links erhalten und manche editieren..? (aktuell JSoup) Allgemeine Java-Themen 4
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
G JavaFX Maven Projekt als .exe Datei exportieren Allgemeine Java-Themen 10
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
Neumi5694 Datei komprimiert Allgemeine Java-Themen 6
_user_q Obfuscate einer .jar-Datei mit ProGuard? Allgemeine Java-Themen 2
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
E java mithilfe url .jar datei öffnen Allgemeine Java-Themen 9
E Java .exe Datei mit args starten Allgemeine Java-Themen 2
W Bilder werden in App mit Jar-Datei nicht angezeigt Allgemeine Java-Themen 15
Master3000 Java Datei mehrmals einlesen Allgemeine Java-Themen 4
M Excel Datei Erstellen Allgemeine Java-Themen 2
E Input/Output Eigene Datei mit java öffnen Allgemeine Java-Themen 9
R Sonderzeichen aus Datei einlesen und in Datei ausgeben. Allgemeine Java-Themen 17
Tobero Download .jar von github lädt kaputte Datei runter Allgemeine Java-Themen 3
P Bat Datei in Java ausführen Allgemeine Java-Themen 2
S Verwendet Programmiersprache aus Quellcode - Datei ermitteln Allgemeine Java-Themen 6
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
J Jar-Datei ausführen Allgemeine Java-Themen 7
C Outlook msg-Datei Anhänge extrahieren Allgemeine Java-Themen 2
G Datei aus Ordner wählen, ohne den Dateinamen im Pfad angeben zu müssen Allgemeine Java-Themen 4
C Wav-Datei aus Jar laden? Allgemeine Java-Themen 11
L Best Practice Zip Datei aktualisieren Allgemeine Java-Themen 1
N Speicherort einer Datei im Explorer ändern Allgemeine Java-Themen 8
H Mehrere PNG-Files in einer Datei Allgemeine Java-Themen 9
Gaudimagspam CSV-Datei auslesen in Java Allgemeine Java-Themen 7
S createTempFile erstellt keine temporäre Datei Allgemeine Java-Themen 13
Hatsi09 Jar datei ausführen verursacht NumberFormatException Allgemeine Java-Themen 9
kodela bestimmten Dateityp immer mit jar-Datei öffnen Allgemeine Java-Themen 17
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
B .txt Datei erstellen und auslesen bzw. schreiben Allgemeine Java-Themen 6
J Öffnen eine jar-Datei Allgemeine Java-Themen 11
Dann07 MP3 Datei abspielen funktioniert nicht Allgemeine Java-Themen 6
H ArrayListe in CSV Datei speichern Allgemeine Java-Themen 6
O Aus JAR-Datei erstellte EXE-Datei funktioniert nicht Allgemeine Java-Themen 10
N Txt Datei auslesen. Allgemeine Java-Themen 5
B Datei/Ordner auf Server zugreifen/erstellen Allgemeine Java-Themen 2
MiMa Datei verschieben hat einen Fehler?? Allgemeine Java-Themen 20
MiMa Erstellungsdatum einer Datei Allgemeine Java-Themen 10
O xlsx Datei auslesen mit POI Apache liest keine LEERZELLEN Allgemeine Java-Themen 6
P Input/Output entfernte Datei mit Java öffnen ohne Download Allgemeine Java-Themen 5
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
J Hilfe, Jar Datei kann nicht ausgeführt werden Allgemeine Java-Themen 2
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
O Java-Applikation tut in Netbeans, als JAR nicht, wegen Pfadangaben einer benötigten Datei Allgemeine Java-Themen 8
J Fehlermeldung bei Ausführung von .jar-Datei Allgemeine Java-Themen 9
J Die Letzte Zahl aus einer Text datei lesen Allgemeine Java-Themen 8
Elyt Compiler-Fehler Datei kann nicht erstellt werden. Die Syntax für den Dateinamen etc. ist falsch. Allgemeine Java-Themen 2
M Probleme jar datei. Allgemeine Java-Themen 2
F Datei in String-Array einlesen Allgemeine Java-Themen 8
O docx-Datei erzeugung mit DocXStamper funktioniert nicht Allgemeine Java-Themen 2
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
Bluedaishi Prüfen ob Datei noch geöffnet ist Allgemeine Java-Themen 59
I Temp-Datei wird nicht gelöscht Allgemeine Java-Themen 12
D ODS.Datei öffnet leider in Excel Allgemeine Java-Themen 3
L JavaFX JavaFX Chart in Apache Poi Excel Datei Allgemeine Java-Themen 2
D .txt Datei in .jar Datei speichern Allgemeine Java-Themen 3
ralfb1105 Blöcke aus Datei filtern/suchen und in neue Datei schreiben Allgemeine Java-Themen 10
M Daten aus MatLab Datei lesen Allgemeine Java-Themen 8
L SQL Datei in Eclipse erstellen Allgemeine Java-Themen 3
Drachenbauer Wie sorge ich dafür, dass mein Spiel die ini-Datei in der Resourcen-ordner des Projektes schreibt? Allgemeine Java-Themen 5
Trèfle Excel-Datei nicht speicherbar, da von Java zum Bearbeiten gesperrt. Allgemeine Java-Themen 3
N Datei Zeilenweise Einlesen, Versteckte Zeichen Allgemeine Java-Themen 5
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
G Workupload datei mit Java Downloaden Allgemeine Java-Themen 6
H .jar Datei startet nicht richtig bei Doppelklick Allgemeine Java-Themen 11
S Hilfe bei dem Auslesen einer YAML Datei Allgemeine Java-Themen 8
M Java Eclipse- Datei exportieren Allgemeine Java-Themen 5
R jar-Datei funktioniert nicht Allgemeine Java-Themen 2
R .txt Datei einlesen und auf der Konsole ausgeben lassen Allgemeine Java-Themen 11
T Jar Datei nicht ausführbar Allgemeine Java-Themen 6
H jar-Datei mit java.exe anstatt mit javaw.exe ausführen Allgemeine Java-Themen 9
S Datei wird nicht gefunden Thread.currentThread().getContextClassLoader().getResourceAsStream() Allgemeine Java-Themen 1
A Steuerung von Spiel aus Datei lesen Allgemeine Java-Themen 0
Javafan01 .sh datei in Java ausführen Allgemeine Java-Themen 1
MiMa Speichern von Programmeinstellungen in Datei Allgemeine Java-Themen 7
J Ordner und Datei Struktur einer War Datei Allgemeine Java-Themen 1
J XML Datei mit installiertem Programm öffnen Allgemeine Java-Themen 7
L Weg um Datei zuzuordnen? Allgemeine Java-Themen 3
MiMa Datei kann nicht umbenannt oder verschoben werden ?? Allgemeine Java-Themen 17
S Input/Output Beste Möglichkeit einen String in einen Datei zu Schreiben Allgemeine Java-Themen 2
K Erste Schritte Start einer JAR Datei 2 Wege aber einmal nicht die volle Funktionlität Allgemeine Java-Themen 20
J Datei löschen, die Leerzeichen im Pfad hat Allgemeine Java-Themen 5
Aruetiise " in Datei schreiben Allgemeine Java-Themen 2
K Datei (CSV-ähnlich) in Java einlesen & mit teil der Daten Graphen erstellen Allgemeine Java-Themen 9
S Korrekte Pfadangaben damit eine .jar Datei unter Windwos läuft. Allgemeine Java-Themen 24
The Pi NetBeans Bilder in Jar Datei werden nicht angezeigt Allgemeine Java-Themen 7
RalleYTN Audiolänge einer MP3 Datei erhalten ohne diese vollständig zu laden Allgemeine Java-Themen 15
H Jar-Datei öffnet nur teilweise Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben