TCP Verbindung (Java Client und Visual Basic Server)

Tach zusammen,

Ich bin mittlerweile einige zeitlang mit diesem Problem beschäftigt:
Ich will eine Server-Client TCP-Verbindung herstellen. Vorher habe ich beide als VB-Variante gebastelt, lief auch alles Super.
Jetzt will ich mit einem Android-Gerät via Java einen TCP-Client mit meinem Server verbinden lassen.
Das Problem ist folgendes:

Ich starte den Server
Dieser ist empfangsbereit und wartet auf Clientverbindung
Der Client verbindet sich mit dem Server
Der Client schickt im eine Nachricht ("200")
Der Server empfängt sofort die Nachricht ("200")
Der Server sendet Antwort ("300")
Es dauert jetzt 10 Sekunden
Der Client empfängt Nachricht ("300") und Verbindung wird abgebrochen.

Die Verbindung wird bei mir automatisch nach 10 Sekunden unterbrochen,
also empfängt der Client die Nachricht erst beim Abbruch.

Warum dauert es solange zum zurücksenden? Ich habe den gleichen Server auch für meinen TCP Client für Visual Basic programmiert und dort sind keine Probleme. Was mache ich falsch?
Ich lese ja "zeilenweise". Kann das sein, dass ich da irgendwo etwas vergessen habe? Zeilenabschluss beim Server? Dort schreib ich ja nicht zeilenweise.

Hier mal der Code (ein wenig vereinfacht)

Der Servercode, läuft unter Windows 2003 Server

Dim listener As New TcpListener(50000)
listener.Start()
While True
If listener.Pending Then
Dim client As TcpClient = listener.AcceptTcpClient
Dim stream As NetworkStream = client.GetStream
Dim responsestring As String
Dim clientdata As String
Dim sendbytes As [Byte]()
While True
Try
If stream.DataAvailable Then
Dim bytes(client.ReceiveBufferSize) As Byte
stream.Read(bytes, 0, CInt(client.ReceiveBufferSize))
clientdata = Encoding.ASCII.GetString(bytes)
responsestring = "300$"
sendbytes = Encoding.ASCII.GetBytes(responsestring)
stream.Write(sendbytes, 0, sendbytes.Length)
End If
Threading.Thread.Sleep(25)
Catch ex As Exception
fehler = ex.Message
Exit While
End Try
End While
client.Close()
End If
Threading.Thread.Sleep(25)
End While


Hier der Java Code:

Java:
try {
	    clientSocket = new Socket(SERVER, 50000);
	    DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
	    BufferedReader inFromServer = new BufferedReader(new              
                                                                  InputStreamReader(clientSocket.getInputStream()));
	
            while (true) 
		 {
		    Send = "200";
			     
		     outToServer.writeBytes(Send);
			     
		     while (!inFromServer.ready()) {}
		     Return = inFromServer.readLine();
			    
		    }		  	 	  
     } catch (UnknownHostException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }

Joa, freu mich von euch zu hören :)
 

Poltergeist

Mitglied
ich wuerde so programmieren
Java:
public class Client extends thread {
...
public void run() {
      try {
           send = "200";
           StringBuffer buf = new StringBuffer();
           Socket client = new Socket(SERVER, 50000);
           InputStream in = client.getInputStream();
           OutputStream out = client.getOutputStream();
           out.write(send);
           while ((int b = in.read()) != -1) buf.append((char)b);
           in.close();
           out.close();
           client.close();
           return buf.toString();
      } catch (Exception e) {
           e.printStackTrace();
      }
      return null;
}
Sorry for my German.
 
N

NewLine

Gast
Kann schon sein das es daran liegt das du Zeilenweise lesen willst aber nicht Zeileweise schreibst.
Versuche im Server mal folgendes :

"300\n$"

(oder wie auch immer man Escape-Sequenzen in VB schreibt)
Dadurch sendest du einen expliziten Zeilenumbruch mit.
Gibt es denn in VB nicht die möglichkeit auch Zeilenweise zu schreiben ? (Wobei Windows eh \r\n schicken würde.)
 
Danke für eure Antworten.

Ich habe auf der Serverseite mal einfach etwas hinzugefügt und auf der Clientseite die
andere Variante genommen:


sendbytes = Encoding.ASCII.GetBytes(responsestring + "\n$")
Stream.Write(sendbytes,0,sendbytes.length)

Java:
int b;
			     while (( b = inFromServer.read()) != -1) buf.append((char)b);


Habe es ebenfalls auch mit \n ausprobiert. Leider erhalte ich auf Clientseite dann einfach den Text mit "\n" am Ende. Oder müsste ich das mit ASCII am Ende hinzufügen? Nur da ich Erst seitdem ich Java
nutze auch Probleme habe, wollte ich mal hier bleiben.
 
N

NewLine

Gast
Es ging darum das du die Esacpe-Sequenz "\n" sendest. Oder binär : 0x0A. Und nicht den Text-String "\n".
 
Achso, jo Danke, allerdings bin ich dann jetzt überfragt wie es geht.
Gehört zwar nicht hier ins Forum dann, aber, wie mache ich das?
Kannst du mir da weiterhelfen?
 
N

NewLine

Gast
Ich zitiere mich mal selbst :

"(oder wie auch immer man Escape-Sequenzen in VB schreibt)"

Da ich kein VB kann weis ich auch nicht wie man dort Escape-Sequenzen schreibt. In Java schreibt man einfach \n , \r , \t , usw ... oder wenn man aus der ASCII-Tabelle den Byte-Wert kennt einfach 0x0A , 0x0D , usw ... Eigentlich gehören Escape-Sequenzen zu den wichtigen Grundlagen.
Was auch sein könnte ist das \0 oder 0x00 am Ende fehlt ... bin der Meinung mal sowas gelesen zu haben das C *und Java ist ja in C/C++ geschrieben , also die VM* halt \0 am String-Ende erwartet ...

Allgemein wäre es wirklich einfacher wenn du mal rausbekommen könntest ob und wie man in VB halt Zeichenweise senden *also das gegenstück zu Java : PrintStream.println(String)*.
 
Morgen zusammen :)

Vielen Dank für Eure Hilfe, jetzt hab ich eine Lösung die funktioniert.

Mein Server sendet scheinbar nach jedem Senden ein Abschlussbyte (Als Integer = 16).

Dann lese ich bei meinem Client die Schnittstelle solange aus, bis eben dieses Byte gelesen wird,
etwa so wie folgt:

Java:
int Readint = 0;
String Readletter = "";
String Readline = "";
StringBuffer buf = new StringBuffer();
while (Readint != 16)
{	
     Readint = inFromServer.read();
     if (Readint !=16)
        {
        buf.append((char)Readint);
        Readletter = buf.toString();
        Readline = Readline + Readletter;
        buf.delete(0, buf.length());
        }
 }
 
N

NewLine

Gast
Dir ist schon bewusst das ASCII 16 = 0x0A = "\n" ist oder ? Und das sollte BufferedReader.readLine() eigentlich auch als solches erkennen und damit erwartungsgemäß arbeiten. Warum es da aber Probleme gibt weis ich nicht da ich wie gesagt kein "VB" spreche.
 

r.w.

Bekanntes Mitglied
Dir ist schon bewusst das ASCII 16 = 0x0A = "\n" ist oder ? Und das sollte BufferedReader.readLine() eigentlich auch als solches erkennen und damit erwartungsgemäß arbeiten. Warum es da aber Probleme gibt weis ich nicht da ich wie gesagt kein "VB" spreche.

Falsch! ASCII (dezimal) 16 entspricht 0x10 und ist zwar auch ein Steuerzeichen, hat jedoch nichts mit einem Zeilenende zu tun.


@Daniel_Schepers:
In VB gibt es die Konstanten vbLF (0x0A) und vbCRLF (0x0D0A),
die man an eine Zeichenkette hängen kann, um einen LineFeed, bzw. einen
Return-LineFeed zu markieren. Wobei ich in Deinem Fall zu letzterem tendieren
würde (also vbCRLF).


Dein Basic-Code könnte dann eventuell so funktionieren:

Code:
sendbytes = Encoding.ASCII.GetBytes(responsestring + vbCRLF)
Stream.Write(sendbytes,0,sendbytes.length)

Ich hoffe, dass hilft Dir weiter, auch wenn schon ein paar Tage vergangen sind.

Gruß,
ROlf
 
T

tuxedo

Gast
Tipp so nebenbei: Bei kurzen Nachrichten am Ende der Nachricht den Stream flushen... sonst kann es sein dass er die Nachricht nicht gleich sendet, sondern erstmal puffert und auf mehr Daten zu senden wartet.

Daneben gibt's noch den Nagle-Algorithmus. Den sollte man, wenn man nur wenige, aber kleine Datenhäppchen schickt die schnell ankommen sollen am besten abschalten. Wieso und warum: Wikipedia erklärt's dir.

- Alex
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
F Java Client-Server-Client Verbindung Netzwerkprogrammierung 9
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
M Socket peer to peer Verbindung zwischen Java und Matlab Netzwerkprogrammierung 0
T VPN-Verbindung über Java Netzwerkprogrammierung 4
H Socket Java Chat - Verbindung zum Server fehlgeschlagen. Netzwerkprogrammierung 5
M HTTP HTTPS-Verbindung mittels Java und Javascript Netzwerkprogrammierung 2
P Java / My-Sql Verbindung herstellen Netzwerkprogrammierung 6
D Socketprogrammierung Verbindung C++=>Java Netzwerkprogrammierung 23
K Verbindung mit Java und der Com Schnittstelle Netzwerkprogrammierung 51
C ssh Verbindung mit Java Netzwerkprogrammierung 1
A SSH-Verbindung mit Java? Netzwerkprogrammierung 5
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
D Verbindung zu Geräten mit gleicher IP aber in unterschiedlichen VLans aufbauen Netzwerkprogrammierung 2
M Socket Socket lehnt Verbindung ab Netzwerkprogrammierung 3
IAmFloppy Socket Nachstellen der Verbindung Netzwerkprogrammierung 6
S Bluetooth Verbindung zwischen Android app und Raspberry Pi 3 Netzwerkprogrammierung 1
S Peer2Peer Verbindung trotz NAT Netzwerkprogrammierung 2
Aruetiise Socket Verbindung Überprüfen Netzwerkprogrammierung 18
F Socket Verbindung mit Verschlüsselung und Authentifierzung Netzwerkprogrammierung 1
F Probleme mit Connection Reset bei Telnet Verbindung Netzwerkprogrammierung 1
U Client Soap Verbindung wieder schließen Netzwerkprogrammierung 0
M Verbindung zwischen zwei Pc in dem Selben Netzwerk Netzwerkprogrammierung 8
P Socket Socket-Verbindung Input sehr langsam Netzwerkprogrammierung 1
S FTP Verbindung zu einem BS2000 Großrechner mit Commons Net Netzwerkprogrammierung 0
F Einfache Socket Verbindung Netzwerkprogrammierung 2
F Verbindung zwischen Server und handy Netzwerkprogrammierung 1
M TCP Verbindung Byte-weise lesen? Netzwerkprogrammierung 5
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
F TCP Client, verbindung aufrecht halten Netzwerkprogrammierung 0
I Swing hängt sich auf bei Verbindung zum Server Netzwerkprogrammierung 3
P RMI Hohe CPU Last RMI Verbindung Netzwerkprogrammierung 4
J Pc - Handy Verbindung? Netzwerkprogrammierung 3
M Socket 2x Proxy multithread-server mit Cross Verbindung Netzwerkprogrammierung 0
T Verbindung zum Server fehlgeschlagen Netzwerkprogrammierung 7
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
B Nach Verbindung gleich ObjectStream empfangen Netzwerkprogrammierung 1
R Dauerhaft offene Socket-Verbindung? Netzwerkprogrammierung 3
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
G Socket Socket verbindung für Chat System Netzwerkprogrammierung 3
S Socket Socket Verbindung wiederherstellen Netzwerkprogrammierung 16
T Socket Bidirektionale Verbindung mit Sockets Netzwerkprogrammierung 8
N (TCP) Verbindung ohne Portforwarding Netzwerkprogrammierung 12
N Lan-Verbindung erstellen Netzwerkprogrammierung 2
A TCP über UDP Verbindung? Netzwerkprogrammierung 10
E Verbindung zu SQL-Datenbank auf einem Server Netzwerkprogrammierung 13
S Socket Applet Client bekommt keine GLOBALE Verbindung zum Server Netzwerkprogrammierung 25
D Server Client Verbindung - Unexpected End of File - Invalid HTTP Response Netzwerkprogrammierung 4
V NullPointerException bei Verbindung zu RabbitMQ-Server Netzwerkprogrammierung 4
B FTP commons net verschlüsselte verbindung Netzwerkprogrammierung 11
C Verbindung zu einem Hostrechner über das Internet herstellen Netzwerkprogrammierung 15
T Socket Client versucht zyklische Verbindung zum Server Netzwerkprogrammierung 4
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
A Socket Socket Verbindung unterbrochen --> keine Exception Netzwerkprogrammierung 7
S SVNKit - Verbindung zum Repository trennen? Netzwerkprogrammierung 2
P Socket neuer Client - neue(r) Socket/Verbindung geöffnet? Netzwerkprogrammierung 6
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
X SSH Verbindung zu Remote Datenbank Netzwerkprogrammierung 2
S TCP Verbindung zu Beamer Netzwerkprogrammierung 8
Y server client socket verbindung übers internet aufbauen Netzwerkprogrammierung 8
M ganymed-ssh2.har: ftp-Verbindung über ftp-Proxy Netzwerkprogrammierung 2
D Verbindung zw. zwei Rechnern funzt nicht Netzwerkprogrammierung 5
F Socket Socket Verbindung Netzwerkprogrammierung 10
E Server schließt einfach verbindung? Netzwerkprogrammierung 6
Shoox VPN-Verbindung für Datenbankzugriff Netzwerkprogrammierung 2
X Socket Handy/PC Verbindung unterscheiden Netzwerkprogrammierung 18
O Telnet verbindung Netzwerkprogrammierung 4
Dit_ UDP Verbindung durch Proxy Netzwerkprogrammierung 4
H Socket Client server,verbindung läst sich nicht abbauen&code optimierung Netzwerkprogrammierung 3
V Verbindung zweier Rechner über das Internet mit Sockets Netzwerkprogrammierung 8
N Verbindung zu Fritzbox Socket/Telnet ??? Netzwerkprogrammierung 5
multiholle RMI Verbindung Linux <-> Windows Netzwerkprogrammierung 4
S netzwerkprotokoll auf basis einer tcp verbindung erstellen Netzwerkprogrammierung 9
S SSH Verbindung mit j2ssh Netzwerkprogrammierung 3
H Socket Mit Applet Verbindung zu eigener Website aufbauen Netzwerkprogrammierung 4
H Socket Socket verbindung mit einem TeamSpeak2 Server Netzwerkprogrammierung 5
H TCP verbindung hinter NAT Netzwerkprogrammierung 28
G TCP SSL Verbindung Netzwerkprogrammierung 3
W Socket Shellscript über ssh Verbindung aufrufen Netzwerkprogrammierung 14
N Socket Verbindung wird immer verweigert Netzwerkprogrammierung 5
Dit_ UDP-Verbindung, DatagramPakete Netzwerkprogrammierung 3
S Socket verbindung trennen Netzwerkprogrammierung 3
D Verbindung zu einem Server - POST Netzwerkprogrammierung 2
musiKk SSL-Verbindung mit Client-Zertifikat (Private Key) scheitert Netzwerkprogrammierung 13
B Probleme mit FTP verbindung Netzwerkprogrammierung 22
T Mac Adresse über Socket Verbindung abfragen? Netzwerkprogrammierung 9
L SSL Verbindung aber Server wird erst im Programm festgelegt Netzwerkprogrammierung 4
L Https Verbindung wird aus jar heraus nicht aufgebaut Netzwerkprogrammierung 12
M Verbindung über Proxy// Problem mit Outputstream bei URLConn Netzwerkprogrammierung 5
O TCP Socket-Verbindung überprüfen Netzwerkprogrammierung 4
F Peer to Peer Verbindung zwischen mehreren Clients? Netzwerkprogrammierung 8
F applet verbindung zum server Netzwerkprogrammierung 6
T Verbindung über das Internet Netzwerkprogrammierung 2
G Verbindung zwischen PC und Handy Netzwerkprogrammierung 10
B Bibliothek, um Eckdaten zur Internet-Verbindung rauszufinden Netzwerkprogrammierung 2
C Verbindung zwischen 2 Computern herstellen Netzwerkprogrammierung 12
G USB-Verbindung herstellen Netzwerkprogrammierung 3
O SSH-Verbindung (trilead-ssh2-build212) Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben