Hur får man bra flyt på socket programmering - Blocking read ?
Detta är inte en fråga hur man programmerar med grundlig socket eller vad socket är. Denna fråga handlar om praktisk teknik angående socket när man använder blocking read.
Jag använder ett språk som heter Java och jag har en socketserver och en socketklient. Dessa två ska både tala med varandra och skriva med varandra. Problemet är att jag får inte det att fungera för dem båda låser sig.
Jag använder något som heter blocking read, vilket betyder att den(klient/server) väntar på svar från sin anslutne. När den har fått svar från sin anslutne, så fortsätter programmet som vanligt. Alltså programmet stannar till och lyssnar med andra ord.
Jag har en programmeringssekvens som ser ut så här:
Server & Klient
--------------------------------
Start -------------------
Lyssna Start
Acceptera Acceptera
------------ Skicka
------------ -----------------
------------ -----------------
Läs -----------------
------------ Läs
Problemet är att när min klient skickar data till server så uppfattar inte server något. När server går i läsfunktion så finns det inget att läsa, utan server fortsätter då att lyssna på klienten. När klient går i läsfunktion så händer det absolut inget. Nu står både server och klient i läsfunktion och lyssnar.
Mitt problem är att få till en bra struktur så att när klient skickar så ska server uppfatta detta när den går i läsfunktion.
Samtidigt så är blocking read väldigt bra för att den väntar ju på hela meddelandet ska skickas, istället för om jag skickar ett långt meddelande och servern läser bara halva meddelandet. Då är det ju en misslyckad kommunikation.
Så har ni några praktiska förslag på hur man löser dessa problem?
Javaklasserna som jag använde är följande för klient är:
socket = new Socket(ip, port);
inputStream = socket.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
outputStream = this.socket.getOutputStream();
bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
För server är det:
inputStream = socket.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
outputStream = socket.getOutputStream();
bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));