Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Java ::  Probleme mit SocketChannels     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Pellaeon
Mitglied

Benutzerprofil
Anmeldungsdatum: 30.05.2005
Beiträge: 2539
Beitrag Pellaeon Mitglied 14:03:30 01.03.2010   Titel:   Probleme mit SocketChannels            Zitieren

Hiho,

für nichtblockierendes Lesen hab ich einen einfachen Server und einen Client mit den SocketChannels geschrieben.

Server:
Java Code:
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
m_serverSocketChannel = ServerSocketChannel.open();
m_serverSocketChannel.socket().bind(new InetSocketAddress(50003));           
SocketChannel socketChannel =  m_serverSocketChannel.accept();

m_converter.toByteArray("21___|||___Ich brauch neues Bier");
socketChannel.write(m_converter.getByteBuffer());
           
m_converter.toByteArray("10___|||___012345678");
socketChannel.write(m_converter.getByteBuffer());
Java Code:
1
2
3
4
5
6
7
8
9
m_serverSocketChannel = ServerSocketChannel.open();
m_serverSocketChannel.socket().bind(new InetSocketAddress(50003));
SocketChannel socketChannel = m_serverSocketChannel.accept();

m_converter.toByteArray("21___|||___Ich brauch neues Bier");
socketChannel.write(m_converter.getByteBuffer());

m_converter.toByteArray("10___|||___012345678");
socketChannel.write(m_converter.getByteBuffer());
Java Code:
1
2
3
4
5
6
7
8
9
m_serverSocketChannel = ServerSocketChannel.open();
m_serverSocketChannel.socket().bind(new InetSocketAddress(50003));           
SocketChannel socketChannel =  m_serverSocketChannel.accept();

m_converter.toByteArray("21___|||___Ich brauch neues Bier");
socketChannel.write(m_converter.getByteBuffer());
           
m_converter.toByteArray("10___|||___012345678");
socketChannel.write(m_converter.getByteBuffer());


Auf Client-Seite:
Java Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
m_socket = SocketChannel.open();
m_socket.configureBlocking(false);
m_socket.connect(new InetSocketAddress(host,Integer.valueOf(port).intValue()));
           
while (!m_socket.finishConnect())
{
          //waiting
}
Java Code:
1
2
3
4
5
6
7
8
m_socket = SocketChannel.open();
m_socket.configureBlocking(false);
m_socket.connect(new InetSocketAddress(host,Integer.valueOf(port).intValue()));

while (!m_socket.finishConnect())
{
//waiting
}
Java Code:
1
2
3
4
5
6
7
8
m_socket = SocketChannel.open();
m_socket.configureBlocking(false);
m_socket.connect(new InetSocketAddress(host,Integer.valueOf(port).intValue()));
           
while (!m_socket.finishConnect())
{
          //waiting
}


Lesen in einer Endlosschleife (testweise) mache ich folgender Maßen:

Java Code:
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
int count = m_socket.read(m_converter.getByteBuffer());
if (count == -1)
{
    throw new Exception("Verbindung weg");
}
       
if (count != 0)
{
    ///mach was
Java Code:
1
2
3
4
5
6
7
8
9
int count = m_socket.read(m_converter.getByteBuffer());
if (count == -1)
{
throw new Exception("Verbindung weg");
}

if (count != 0)
{
///mach was
Java Code:
1
2
3
4
5
6
7
8
9
int count = m_socket.read(m_converter.getByteBuffer());
if (count == -1)
{
    throw new Exception("Verbindung weg");
}
       
if (count != 0)
{
    ///mach was


Folgendes Problem tritt nun auf:
mach ich auf Server-Seite zwischen den einzelnen Schreibaufrufen ein Thread.sleep(1), dann liest der Client alle folgenden Nachrichten nicht mehr. Außerdem kommt auch weder -1 noch eine Exception, wenn der Server seine Verbindung mit close geschlossen hat- Woran liegt das? Ich bin da grad sehr ideenlos oO


MfG Pellaeon

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Zuletzt bearbeitet von Pellaeon am 14:04:15 01.03.2010, insgesamt 1-mal bearbeitet
C/C++ Forum :: Java ::  Probleme mit SocketChannels   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.