Avatar billede lakana Nybegynder
30. april 2006 - 23:06 Der er 37 kommentarer og
1 løsning

heY socket melder fejl igen!!

heej..!
sidder med et problem..


får dette i min console:
----server----


C:\Documents and Settings\Ejer\Skrivebord>cd C:\eymama

C:\eymama>java -cp . chat.lyt
[server] Starter echo server pÕ port 9999
[server] Accepterede forbindelse fra 127.0.0.1:4759
[server] Fejl: Input/Output fejl
java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(Unknown Source)
        at tower.lyt.main(lyt.java:49)


den fejl får jeg ligeså snart jeg åbner min fil som sender til socken..

se her:

--server--


package chat;

import java.net.Socket;
import java.net.UnknownHostException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.*;
import chat.brugere.*;
class socketsend {

  public static void send(String data) {
          try {

                Socket socket = new Socket("localhost", 9999);
                BufferedOutputStream output = new BufferedOutputStream(socket.getOutputStream());
                output.write(data.getBytes());
                output.flush();

            }catch (IOException ioe){
                ioe.printStackTrace();
            }
        }
}



og her er min brugere.class:


import tower.skrivemetode;
import tower.socketsend.*;

public class brugere
{
  public static void main(String[] arg)
  {
     
        socketsend.send("eow");

-- osv



og her er min lyt:

class lyt {

    public static void main(String[] arg) {
    final int port = 9999;

    System.out.println("[server] Starter echo server på port "+port);

    ServerSocket srv = null;
    try {
        srv = new ServerSocket(port);
    } catch (BindException be) {
        be.printStackTrace();
        System.exit(1);
    } catch (IOException e) {
        e.printStackTrace();
        System.exit(1);
    }
    Socket sock = null;
    try {
        while ((sock = srv.accept()) != null) {
        InetAddress remoteHost = sock.getInetAddress();
        int remotePort = sock.getPort();
        System.out.println("[server] Accepterede forbindelse fra "+
                  remoteHost.getHostAddress()+
                  ":"+remotePort);

        InputStream in = sock.getInputStream();
        OutputStream out = sock.getOutputStream();


        byte[] buffer = new byte[16384];
        while (true) {
         
            int read = in.read(buffer, 0, buffer.length);

            if (read == -1)
            break;

            out.write(buffer, 0, read);
        }
        System.out.println("[server] Forbindelse afbrudt..");
        }
    } catch (IOException e) {
        System.out.println("[server] Fejl: Input/Output fejl");
        e.printStackTrace();
        System.exit(1);
    }
    }



kan i se fejl?=??
Avatar billede arne_v Ekspert
01. maj 2006 - 01:00 #1
client lukker forbindelsen efter at have sendt og server får en fejl
Avatar billede lakana Nybegynder
01. maj 2006 - 01:14 #2
jahh men hvorf får den fejl?? det skulle da virke!!
Avatar billede lakana Nybegynder
01. maj 2006 - 01:39 #3
hey arne! har fundet et skide godt stykke kode.. men når jeg får et stykke output går den til en fejl.

hva skal jeg gøre? jeg bruger jo ikke nogle exit eller close metoder??

SENDE METODEN:

package chat;

import java.net.Socket;
import java.net.UnknownHostException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;

import java.io.*;
import chat.brugere.*;
import chat.lyt.*;
public class socketsend
{
public static void send(String data)
{
    try {
    Socket s;
   
   
        s = new Socket("localhost", 9999);
        PrintWriter ud = new PrintWriter (s.getOutputStream(),true);
        BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
         
            ud.println(data);
            ud.flush();
        } catch (IOException e) {
        System.out.println("Could not listen on port: 9999");
 
}
        }}


og her er den hvor den modtager:


package chat;

import java.net.*;
import java.io.*;
import chat.brugere.*;

public class lyt {

  public static void main(String[] arg) {
    try {
      ServerSocket server = new ServerSocket( 9999 );
      System.out.println( "[Server] Online" );
     
      Socket connection = server.accept();
   
      BufferedReader reader = new BufferedReader(
                                new InputStreamReader(
                                  connection.getInputStream() ) );
     
      String line = "";
      while (true) {
        line = reader.readLine();
       
        System.out.println( "[Server] received line: " + line );
      }
     
     
    }
    catch ( IOException e ) {
      System.out.println( "[Server] I/O error" );
    }
  }
}
Avatar billede lakana Nybegynder
01. maj 2006 - 01:40 #4
C:\javachat>java -cp . chat.lyt
[Server] Online
[Server] received line: eow
[Server] I/O error
Avatar billede arne_v Ekspert
01. maj 2006 - 01:54 #5
try {

                Socket socket = new Socket("localhost", 9999);
                BufferedOutputStream output = new BufferedOutputStream(socket.getOutputStream());
                output.write(data.getBytes());
                output.flush();

            }catch (IOException ioe){
                ioe.printStackTrace();
            }

socket går ud af scope => connection bliver closet ved GC
Avatar billede arne_v Ekspert
01. maj 2006 - 01:54 #6
try {
    Socket s;
 
 
        s = new Socket("localhost", 9999);
        PrintWriter ud = new PrintWriter (s.getOutputStream(),true);
        BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
       
            ud.println(data);
            ud.flush();
        } catch (IOException e) {
        System.out.println("Could not listen on port: 9999");

}

det samme
Avatar billede arne_v Ekspert
01. maj 2006 - 01:55 #7
(her hedder den bare s)
Avatar billede lakana Nybegynder
01. maj 2006 - 01:56 #8
hmm jaa..
men altså.. hvis den går dud af scope, hva gør jeg så?

den skal blive hængende, sådan jeg kan sende flere kommando efter hinanden jo

har prøvet din sidste kommentar, den siger det samme
Avatar billede arne_v Ekspert
01. maj 2006 - 02:00 #9
public class socketsend {
    private Socket s; // <------------------------ herud med den
    public static void send(String data) {
        try {
Avatar billede arne_v Ekspert
01. maj 2006 - 02:00 #10
og så lav al initialisering i constructor
Avatar billede lakana Nybegynder
01. maj 2006 - 02:02 #11
får samme fejl!

package chat;

import java.net.Socket;
import java.net.UnknownHostException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;

import java.io.*;
import chat.brugere.*;
import chat.lyt.*;
public class socketsend
{
private static Socket s;
public static void send(String data)
{

  try {
s = new Socket("localhost", 9999);
 
 
        PrintWriter ud = new PrintWriter (s.getOutputStream(),true);
        BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
       
            ud.println(data);
            ud.flush();
        } catch (IOException e) {
        System.out.println("Could not listen on port: 9999");

}
        }}
Avatar billede arne_v Ekspert
01. maj 2006 - 02:09 #12
også hvis du flytter

s = new Socket("localhost", 9999);

til constructor ?
Avatar billede lakana Nybegynder
01. maj 2006 - 02:11 #13
public class socketsend
{
private static Socket s;
s = new Socket("localhost", 9999);

<identifere> expected
Avatar billede arne_v Ekspert
01. maj 2006 - 02:14 #14
public class socketsend {
    private static Socket s;
    public socketsend() {
        s = new Socket("localhost", 9999);
    }
Avatar billede lakana Nybegynder
01. maj 2006 - 02:16 #15
Så mangler den en try
og den er jo allerede lavet, så bliver det samme resultat som før?
Avatar billede lakana Nybegynder
01. maj 2006 - 02:18 #16
public class socketsend
{
private static Socket s;

public void socketsend()
{
try {
s = new Socket("localhost", 9999);
} catch (IOException e) {
System.out.println("Could not listen on port: 9999");
}
}
Avatar billede lakana Nybegynder
01. maj 2006 - 02:21 #17
har også prøvet at fjerne void til
public socketsend()
{
...


giver samme resultat.. hvad er fejlen så?
Avatar billede lakana Nybegynder
01. maj 2006 - 02:21 #18
C:\eymama>java -cp . chat.brugere
Exception in thread "main" java.lang.NullPointerException
        at chat.socketsend.send(socketsend.java:32)
        at chat.brugere.main(brugere.java:13)
Avatar billede arne_v Ekspert
01. maj 2006 - 02:30 #19
ikke void

men nu opdager jeg lige at din send er static

prøv og lav den ikke static (kræver også rettelse i koden som kalder den)
Avatar billede lakana Nybegynder
01. maj 2006 - 02:31 #20
jeps men hvordan skal denne så se ud?
        PrintWriter  ud = new PrintWriter (s.getOutputStream(),true);

den vil nemlig ikke
static  PrintWriter  ud = new PrintWriter (s.getOutputStream(),true);
Avatar billede lakana Nybegynder
01. maj 2006 - 02:32 #21
laver jeg:
public void send(String data)
frem for
public static void send(String data)

siger den

Exception in thread "main" java.lang.Incompatib
        atc hat.brugere.main(brugere.java:13)
Avatar billede lakana Nybegynder
01. maj 2006 - 02:33 #22
Exception in thread "main" java.lang.IncompatibleClassChangeError *
Avatar billede arne_v Ekspert
01. maj 2006 - 02:38 #23
lyder som om du mangler at genoversætte noget
Avatar billede lakana Nybegynder
01. maj 2006 - 02:40 #24
Vil du ikke være sød at kigge? Har opgivet efter søvnige øjne!!!!!


package tower;

import java.net.Socket;
import java.net.UnknownHostException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;

import java.io.*;
import tower.brugere.*;
import tower.lyt.*;
public class socketsend
{
private Socket s;

public socketsend()
{
try {
s = new Socket("localhost", 9999);
} catch (IOException e) {
System.out.println("Could not listen on port: 9999");
}
}
public void send(String data)
{
 
  try {

 
 
        PrintWriter  ud = new PrintWriter (s.getOutputStream(),true);
        BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
       
            ud.println(data);
            ud.flush();
        } catch (IOException e) {
        System.out.println("Could not listen on port: 9999");

}
        }}
Avatar billede arne_v Ekspert
01. maj 2006 - 02:52 #25
jeg tror at du bare skal genoversætte alle dine klasser
Avatar billede lakana Nybegynder
01. maj 2006 - 08:10 #26
hvad mener du med genoversætte alle mine klasser
Avatar billede lakana Nybegynder
01. maj 2006 - 10:02 #27
bruger denne kode til at skrive:

socketsend.send("eow");
Avatar billede lakana Nybegynder
01. maj 2006 - 14:08 #28
andre der kan hjælpe så?
det virker jo ikke??
Avatar billede arne_v Ekspert
01. maj 2006 - 14:12 #29
socketsend.send("eow");

skal være

socketsend ss = new socketsend();
ss.send("eow");

og så vil du kunne bruge ss til at sende flere kommandoer uden at connection
lukkes ned
Avatar billede lakana Nybegynder
01. maj 2006 - 14:22 #30
public class brugere
{
  public static void main(String[] arg)
  {

        socketsend ss = new socketsend();
        ss.send("eow");
        ss.send("eow2");
        ss.send("hej ARNE!");

giver følgende i commando:

[Server] Online
[Server] received line: eow
[Server] received line: eow2
[Server] received line: hej ARNE!
[Server] I/O error



- ingen ændringer????
Avatar billede lakana Nybegynder
01. maj 2006 - 14:30 #31
det virker jo.. men hvordan får jeg den til at blive online og ikke går ned når min "brugere" er loadet?

den skal være online hele tiden jo..
Avatar billede arne_v Ekspert
01. maj 2006 - 15:04 #32
forbindelsen er aaben lige saa laenge ss objektet eksisterer

hvad skal brugere programmet goere efter at have sendt en goddag til server ?
Avatar billede lakana Nybegynder
01. maj 2006 - 15:06 #33
den skal jo sende kommandoer efter tid..
hvis en anden rykker med kryds og bolle, så skal den svare..

altså en response til response, tid til tid

hvor den ikke giver timeout
Avatar billede arne_v Ekspert
01. maj 2006 - 15:10 #34
saa tror jeg at du skal taenke i baner af:

saa laange spillet ikker afgjordt {
    laes modtander traek fra server
    send eget traek til server
}
Avatar billede lakana Nybegynder
01. maj 2006 - 15:16 #35
takker.. smid svar..
hvordan siger man så

if (line.startermed == "kryds")
{
  ...

har prøvet line.equals("kryds") == true

virker ikke!
Avatar billede lakana Nybegynder
01. maj 2006 - 15:27 #36
smid svar

det var
if (line.indexOf("kryds") == -1)
Avatar billede arne_v Ekspert
01. maj 2006 - 15:48 #37
den tester vel paa om kryds ikke er i linien

der er f.eks. en line.startsWith("kryds")
Avatar billede arne_v Ekspert
01. maj 2006 - 15:51 #38
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