2006-11-19, 20:39
  #1
Medlem
analpluggs avatar
Har ett program som skall gra en kort liten sekvens bara fr att testa sockets.
Jag kr en lokal server p port 2000 dr jag sjlv kan vlja vad jag ska svara.
Problemet med denna kod r att jag aldrig kommer in if-satsen (nstan lngst ner i koden) ven om jag skickar OK frn servern till klienten s kommer den aldrig in dit. Kan ngon hjlpa?



Koden r:
Kod:
import java.io.*;
import java.net.*;

public class EchoClient {
    public static void main(String[] args) throws IOException {

        Socket echoSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;
        boolean bajs = true;

        try 
        {
            echoSocket = new Socket("127.0.0.1", 2000);
            out = new PrintWriter(echoSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(
                                        echoSocket.getInputStream()));
        }
        catch (UnknownHostException e) 
        {
            System.err.println("Error connectiong");
            System.exit(1);
        } 
        	catch (IOException e) 
        {
            System.err.println("Couldn't get I/O for "+ "the connection.");
            System.exit(1);
        }

	BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
		
		while(bajs==true)
		{
			out.println("HEJSAN");
			String svar1 = in.readLine();
			System.out.println (svar1);
			
			
			if(svar1=="OK")
			{
				System.out.println ("Jag r inne i glada loopen nu!");
				out.println("OKAY");
				
			}
			else
			{
				System.out.println (in.readLine());
			}	
	    }

	out.close();
	in.close();
	stdIn.close();
	echoSocket.close();
    }
}
Citera
2006-11-19, 20:44
  #2
Medlem
Citat:
Ursprungligen postat av analplugg
Har ett program som skall gra en kort liten sekvens bara fr att testa sockets.
Jag kr en lokal server p port 2000 dr jag sjlv kan vlja vad jag ska svara.
Problemet med denna kod r att jag aldrig kommer in i for-loopen (nstan lngst ner i koden) ven om jag skickar OK frn servern till klienten s kommer den aldrig in dit. Kan ngon hjlpa?

Jag hittar ingen for-loop. Fr vrigt r det bra att stoppa in kod i kodrutor (#-knappen) istllet fr citatrutor (pratbubbleknappen). Jag tror bestmt att den behller indenteringen d.
Citera
2006-11-19, 20:58
  #3
Medlem
analpluggs avatar
Citat:
Ursprungligen postat av init
Jag hittar ingen for-loop. Fr vrigt r det bra att stoppa in kod i kodrutor (#-knappen) istllet fr citatrutor (pratbubbleknappen). Jag tror bestmt att den behller indenteringen d.

Trtt i huvudet r man.
ndrat inlgget till att kra code, tack fr tipset.

Menar frsts if-satsen.
Hr r den:

Kod:
			out.println("HEJSAN");
			String svar1 = in.readLine();
			System.out.println (svar1);
			
			
			if(svar1=="OK")
			{
				System.out.println ("Jag r inne i glada loopen nu!");
				out.println("OKAY");
				
			}
			else
			{
				System.out.println (in.readLine());
			}	

Kommer som sagt ej in i den trots att jag skickar OK frn servern till klienten.
Citera
2006-11-19, 21:15
  #4
Medlem
Citat:
Ursprungligen postat av analplugg

Kod:
out.println("HEJSAN");
String svar1 = in.readLine();

Kommer som sagt ej in i den trots att jag skickar OK frn servern till klienten.

I vilken ordning lser och skriver du till socketen p servern? Det r mjligt att out.println() blockerar (dvs inte returnerar) innan mottagaren lst meddelandet, ven om jag r lngt ifrn sker p det. Du kan ju brja med att skriva ut ngot unikt meddelande mellan varje rad, s att du ser hur lngt du kommer:

Kod:
System.err.println("FOO");
out.println("HEJSAN");
System.err.println("BAR");
String svar1 = in.readLine();
System.err.println("BAZ");

System.err r felmeddelandestrmmen. Anledningen till att jag anvnder den fr debugmeddelanden r att den inte r buffrad, vilket standardutdatastrmmen System.out r.
Citera
2006-11-19, 21:20
  #5
Medlem
analpluggs avatar
Citat:
Ursprungligen postat av init
I vilken ordning läser och skriver du till socketen på servern? Det är möjligt att out.println() blockerar (dvs inte returnerar) innan mottagaren läst meddelandet, även om jag är långt ifrån säker på det. Du kan ju börja med att skriva ut något unikt meddelande mellan varje rad, så att du ser hur långt du kommer:

Kod:
System.err.println("FOO");
out.println("HEJSAN");
System.err.println("BAR");
String svar1 = in.readLine();
System.err.println("BAZ");

System.err är felmeddelandeströmmen. Anledningen till att jag använder den för debugmeddelanden är att den inte är buffrad, vilket standardutdataströmmen System.out är.


Tackar för bra förklaring.
Exemplen du ger funkar fint.
Jag kan skicka flera meddelanden i rad osv.
Det är if-satsen som krånglar...


EDIT:
Jag är en retard, man kan inte jämföra strängar med == utan måste använda s1.equalsIgnoreCase(s2);
Tack ändå! =)
Citera
2006-11-20, 11:52
  #6
Medlem
Citat:
Ursprungligen postat av analplugg
Tackar fr bra frklaring.
Exemplen du ger funkar fint.
Jag kan skicka flera meddelanden i rad osv.
Det r if-satsen som krnglar...


EDIT:
Jag r en retard, man kan inte jmfra strngar med == utan mste anvnda s1.equalsIgnoreCase(s2);
Tack nd! =)


eller myString.equals("OK");
sen kan du skriva: while(bajs) istf while(bajs==true)
pss while(!bajs) istf while(bajs!=true)
Citera
2006-11-20, 13:14
  #7
Medlem
Citat:
Ursprungligen postat av analplugg
Jag r en retard, man kan inte jmfra strngar med == utan mste anvnda s1.equalsIgnoreCase(s2);

Och jag har varit fr insnad p C++ den senaste tiden, s jag sg inte det.

Det var flera r sedan jag skrev en enda rad Java.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in