Avatar billede irma_n1 Novice
02. oktober 2005 - 10:46 Der er 10 kommentarer og
1 løsning

tcpclient og tcpserver klasser

jeg har de nedenstående to klasser. Det der skal gøres er at en string besked skal læses fra client klassen sendes og så udskrives af server klassen. Er der nogen der har forslag til hvordan dette kan gøres?

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

public class TCPClient {

    public static void main (String args[]){
        Socket s = null;
       
    try{
        int serverPort = 7896;
        s = new Socket(args[1], serverPort);
        DataInputStream in = new DataInputStream(s.getInputStream());
        DataOutputStream out = new DataOutputStream(s.getOutputStream());
        String tekst = "Virker lortet?";
       
        out.writeUTF(args[0]);
        String data = in.readUTF();
        System.out.println("Recieved" + data );
        }
   
    catch(UnknownHostException e){
       
        System.out.println("Sock:" + e.getMessage());}
    catch(EOFException e){System.out.println("EOF" + e.getMessage());}
    catch(IOException e) {System.out.println("IO:" + e.getMessage());}

    finally {
            if (s!=null) try {s.close();} catch(IOException e){/*close failed*/}}
}
}

OG

import java.net.*;
import java.io.*;
public class TCPServer {
    public static void main (String args[]) {
        try{
            int serverPort = 7896; // the server port
            ServerSocket listenSocket = new ServerSocket(serverPort);
            while(true) {
                Socket clientSocket = listenSocket.accept();
                Connection c = new Connection(clientSocket);
            }
        } catch(IOException e) {System.out.println("Listen socket:"+e.getMessage());}
    }
}
class Connection extends Thread {
    DataInputStream in;
    DataOutputStream out;
    Socket clientSocket;
    public Connection (Socket aClientSocket) {
        try {
            clientSocket = aClientSocket;
            in = new DataInputStream( clientSocket.getInputStream());
            out =new DataOutputStream( clientSocket.getOutputStream());
            this.start();
           
            run();//MIT


        } catch(IOException e) {System.out.println("Connection:"+e.getMessage());}
    }
    public void run(){
        try {                            // an echo server

            String data = in.readUTF();                      // read a line of data from the stream
            out.writeUTF(data);

            System.out.println(data); // MINE TILFOEJELSER

        }catch (EOFException e){System.out.println("EOF:"+e.getMessage());
        } catch(IOException e) {System.out.println("readline:"+e.getMessage());
        } finally{ try {clientSocket.close();}catch (IOException e){/*close failed*/}}
       

    }
}
Avatar billede arne_v Ekspert
02. oktober 2005 - 10:50 #1
og hvad er du kørt fast i ?
Avatar billede arne_v Ekspert
02. oktober 2005 - 10:57 #2
en ting som undrer mig er at du kalder både start og run i constructor

umiddelbart syne sjeg at du skulle kalde start i main (og selvfølgelig ikke kald
run overhovedet)
Avatar billede irma_n1 Novice
02. oktober 2005 - 11:53 #3
vel jeg kan ikke få server delen til at udskrive String tekst fra client delen
Avatar billede arne_v Ekspert
02. oktober 2005 - 12:13 #4
import java.net.*;
import java.io.*;

public class TCPServer {
    public static void main (String args[]) {
        try{
            int serverPort = 7896; // the server port
            ServerSocket listenSocket = new ServerSocket(serverPort);
            while(true) {
                Socket clientSocket = listenSocket.accept();
                Connection c = new Connection(clientSocket);
                c.start();
            }
        } catch(IOException e) {
            System.out.println("Listen socket:"+e.getMessage());
        }
    }
}
class Connection extends Thread {
    private DataInputStream in;
    private DataOutputStream out;
    private Socket clientSocket;
    public Connection (Socket aClientSocket) {
        try {
            clientSocket = aClientSocket;
            in = new DataInputStream( clientSocket.getInputStream());
            out =new DataOutputStream( clientSocket.getOutputStream());
        } catch(IOException e) {
            System.out.println("Connection:"+e.getMessage());
        }
    }
    public void run(){
        try {                            // an echo server
            String data = in.readUTF();                      // read a line of data from the stream
            out.writeUTF(data);
            System.out.println(data); // MINE TILFOEJELSER
        }catch (EOFException e){
            System.out.println("EOF:"+e.getMessage());
        } catch(IOException e) {
            System.out.println("readline:"+e.getMessage());
        } finally {
            try {
                clientSocket.close();
            }catch (IOException e){
                /*close failed*/
            }
        }
    }
}

og

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

public class TCPClient {
    public static void main(String args[]) {
        Socket s = null;
        try {
            int serverPort = 7896;
            s = new Socket("localhost", serverPort);
            DataInputStream in = new DataInputStream(s.getInputStream());
            DataOutputStream out = new DataOutputStream(s.getOutputStream());
            String tekst = "Virker lortet?";
            out.writeUTF(tekst);
            String data = in.readUTF();
            System.out.println("Recieved" + data);
        } catch (UnknownHostException e) {
            System.out.println("Sock:" + e.getMessage());
        } catch (EOFException e) {
            System.out.println("EOF" + e.getMessage());
        } catch (IOException e) {
            System.out.println("IO:" + e.getMessage());
        } finally {
            if (s != null) {
                try {
                    s.close();
                } catch (IOException e) {
                    /* close failed */
                }
            }
        }
    }
}

virker fint hos mig
Avatar billede arne_v Ekspert
02. oktober 2005 - 12:13 #5
jeg har:

- ændret thread start som allerede beskrevet
- formateret lidt så koden kan læses
- hardkodet servernavn og tekst
Avatar billede irma_n1 Novice
02. oktober 2005 - 13:44 #6
hos mig virker det ikke---når jeg indtaster java TCPServer så er der bare en linie der blinker...den connecter men der er ingen tekst
Avatar billede arne_v Ekspert
02. oktober 2005 - 19:30 #7
altså det er client som connecter ikke server

og server skal ikke gøre noget førend client connecter

så hvad gør du og hvad sker der ?
Avatar billede irma_n1 Novice
02. oktober 2005 - 21:30 #8
ja men når jeg prøver at køre client klassen får jeg fejlen
IO:Connection refused: connect
Avatar billede arne_v Ekspert
02. oktober 2005 - 21:31 #9
det tyder umiddelbart på at serveren ikke kører

eller så har du måske en firewall som blokerer for porten ??
Avatar billede irma_n1 Novice
02. oktober 2005 - 22:14 #10
ok nu virker det!!! Problemet var at jeg faktisk ikke kørte serveren før jeg kørte klienten....det har været en lang dag så min hjerne er ikke helt med :-)
Mange tak for hjælpen. Send lige en svar så du kan få points
Irma
Avatar billede arne_v Ekspert
02. oktober 2005 - 22:15 #11
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester