Toon posts:

[Java] Sockets problemen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil met gebruik van java een Client server model op zetten. Dit doe ik via sockets alleen heb ik de API door gebladerd en wel wat code kunnen schrijven.
Echter is het met de bufferreaders/inputStreams niet helemaal duidelijk (maar das gene probleem) het grote punt is het sturen van data.
In m'n java boek word beschreven dat je via deze weg het via FIFO door stuurt.
Alleen komst daar weinig van terug. In m'n output heb ik bv bij de server altijd auto (ipv fiets \n auto) en op de klient kom er nooit tank te staan.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
public class Cserver
{
    public static void main(String [] ARGS)
    {
    System.out.println("| Welcome to the C service |");
    System.out.println("| ---------------------------- |\n");
    
        try
    {
     ServerSocket ss = new ServerSocket(8008);
     Socket ctc = ss.accept();
     HandleAClient thread = new HandleAClient(ctc);
     thread.setMaxClients(3);
     thread.start();        
     
    }
    catch(IOException e)
    {
    System.out.println(e.toString());
    }
    }
}

class HandleAClient extends Thread
{
    private BufferedReader in;
    private PrintWriter out;

    private int maxClients = 1;
    private int clients = 0;    

    public HandleAClient(Socket socket)
    {
        if(maxClients >=clients+1)
        {
            try
            {
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            out = new PrintWriter(socket.getOutputStream(), true);
            clients++;
            System.out.println("A user has conencted to the service, now total of "+clients+" users connected.\n");
            }
            catch(IOException e)
            {
            System.out.println(e.toString());   
            }
        }

    }
    public void setMaxClients(int max)
    {
        if(this.isAlive()==false)
            maxClients = max;
    }
    
    
    public void run()
    {
        try
        {   
            if(in.readLine() !=null){               
                if(in.readLine() == "auto")
                    out.write("tank");
                else
                    System.out.println(in.readLine());
            }
        }
        catch(Exception e)
        {
            System.out.println(e.toString());   
        }   
    }}

import java.io.*;
import java.net.*;

public class Cclient
{
   public static void main(String [] ARGS)
    {
    System.out.println("|------------------------------|");
    System.out.println("|  Welcome to the Cclient |");
    System.out.println("|------------------------------|\n");
    try
    {
        Socket ss = new Socket("localhost",8008);
        PrintWriter Pout = new PrintWriter(ss.getOutputStream(), true);
        BufferedReader Pin = new BufferedReader(new InputStreamReader(ss.getInputStream()));
        while(ss.isConnected())
        {
        Pout.println("fiets");
        Pout.println("auto");
        System.out.println(Pin.readLine());
        }
    }
    catch(IOException e)
    {
    System.out.println(e.toString());
    }
    }}

[ Voor 35% gewijzigd door Verwijderd op 23-05-2003 13:53 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
Wat krijg je er dan precies wel uit? Ik vind je code vrij ingewikkeld en je probleemomschrijving vrij summier. Een van je problemen zou veroorzaakt kunnen worden door het vergelijken van object references op regel 62; gebruik hier equals voor.

Misschien moet je eens wat systematischer gaan debuggen, want het is mij compleet onduidelijk wat voor protocol je nu geïmplementeerd denkt te hebben.

  • Mennootje
  • Registratie: December 2000
  • Laatst online: 04-08 16:12
Denk dat je alleen "auto" krijgt omdat dat de eerste line is die je verstuurt. Je HandleAClient-thread runt nl. maar 1x je run()-methode. Ik zou hem zo maken:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void run() {
        try
        {    
           while(in.readLine() !=null){                
                if(in.readLine().equals("auto")
                    out.write("tank");
                else
                    System.out.println(in.readLine());
            }
        }
        catch(Exception e)
        {
            System.out.println(e.toString());    
        }    
} 

Denk als je server werkt je client in een oneindige while lus komt:
Java:
1
2
3
4
5
6
while(ss.isConnected())
        {
        Pout.println("fiets");
        Pout.println("auto");
        System.out.println(Pin.readLine());
        } 


Lijkt me ook niet de bedoeling ;)