Avatar billede kj-1 Nybegynder
30. april 2001 - 09:32 Der er 13 kommentarer

Java client

Jeg kan godt få denne klient til at virke lokalt på pc med serveren kørende, men ikke over netværket fra en anden pc hvad skal jeg gøre ved det

/*
* ChatClient.java
*
* Created on 29. april 2001, 19:03
*/


/**
*
* @author  lord x
* @version
*/

import java.io.*;
import java.net.*;
public class ChatClient extends java.applet.Applet {

    /** Initializes the applet ChatClient */
    public void init () {
        initComponents ();
    }

    /** This method is called from within the init() method to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the FormEditor.
    */
    private void initComponents() {
        button1 = new java.awt.Button();
        textField1 = new java.awt.TextField();
        setLayout(new java.awt.BorderLayout());
       
        button1.setFont(new java.awt.Font (\"Dialog\", 0, 11));
        button1.setLabel(\"button1\");
        button1.setName(\"button1\");
        button1.setBackground(java.awt.Color.lightGray);
        button1.setForeground(java.awt.Color.black);
        button1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                button1ActionPerformed(evt);
            }
        }
        );
       
        add(button1, java.awt.BorderLayout.CENTER);
       
       
        textField1.setBackground(java.awt.Color.white);
        textField1.setName(\"textfield1\");
        textField1.setFont(new java.awt.Font (\"Dialog\", 0, 11));
        textField1.setForeground(java.awt.Color.black);
        textField1.setText(\"textField1\");
       
        add(textField1, java.awt.BorderLayout.EAST);
       
    }

  private void button1ActionPerformed(java.awt.event.ActionEvent evt) {

 
  String send = textField1.getText();
 
  System.out.println(send);
 
 
  sendClientchatMessage(send);
 
 
 
 
 
 
 
 
 
 
  }

public void sendClientchatMessage(String s)    {
try {


  System.out.println(\"1\");
    /* String host;
      if (args.length > 0 && args[0] != null) {
    host = args[0];
      } else {
    host = \"localhost\";
      }
      */
      Socket t = new Socket(\"223.223.223.3\", 8009);
   
      System.out.println(\"2221\");
      PrintWriter out
    = new PrintWriter(new OutputStreamWriter(t.getOutputStream()));


      System.out.println(\"2\");
     
    System.out.println(\"Sending: line \");
    out.println(s + \"\\n\");
    out.flush();
     
      //out.println(\"BYE\");
    System.out.println(\"3\"); 

   
  } catch (Exception e) {
      System.out.println(\"Error: \" + e);
    }
 
 
 
 
 
 
 
 
 
 
  }




    // Variables declaration - do not modify
    private java.awt.Button button1;
    private java.awt.TextField textField1;
    // End of variables declaration

}
Avatar billede agermose Nybegynder
30. april 2001 - 09:44 #1
en applet kan kun kommunikere med den server, som appletet kom fra - med mindre du har signet det - og det ser ud til at du hardkoder en adresse. Er det server adressen - altså der hvor det applet kommer fra? Får du ikke en exception du kan sende her, så vi kan se den?
Avatar billede kj-1 Nybegynder
30. april 2001 - 09:48 #2
du får lige serveren med


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

class ClientHandler extends Thread {

  protected Socket incoming;

  public ClientHandler(Socket incoming) {
    this.incoming = incoming;
  }

  public void run() {
    try {
      BufferedReader in
    = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
      PrintWriter out
    = new PrintWriter(new OutputStreamWriter(incoming.getOutputStream()));
      out.println(\"Hello! This is Java MultiEchoServer.\");
      out.println(\"Enter BYE to exit.\");
      out.flush();
     
      for (;;) {
    String str = in.readLine();
    if (str == null) {
      break;
    } else {
      out.println(\"Echo: \" + str);
      out.flush();
      System.out.println(\"Received: \" + str);
     
      if (str.trim().equals(\"BYE\"))
        break;
    }
      }
      incoming.close();
    } catch (Exception e) {
      System.out.println(\"Error: \" + e);
    }
  }

}

public class MultiEchoServer {

  public static void main(String[] args) {
    System.out.println(\"MultiEchoServer started.\");
   
    try {
      ServerSocket s = new ServerSocket(8009);
      for (;;) {
    Socket incoming = s.accept();
    new ClientHandler(incoming).start();
      }
    } catch (Exception e) {
      System.out.println(\"Error: \" + e);
    }

    System.out.println(\"MultiEchoServer stopped.\");
  }
}
Avatar billede kj-1 Nybegynder
30. april 2001 - 09:49 #3
applet kommer fra serveren på 223.223.223.3
Avatar billede agermose Nybegynder
30. april 2001 - 09:54 #4
hvad med fejlmeddelelser?

Avatar billede kj-1 Nybegynder
30. april 2001 - 11:25 #5
textField1
1
com.ms.security.SecurityExceptionEx[ChatClient.sendClientchatMessage]: cannot access \"223.223.223.3\":8009
    at com/ms/security/permissions/NetIOPermission.check
    at com/ms/security/PolicyEngine.deepCheck
    at com/ms/security/PolicyEngine.checkPermission
    at com/ms/security/StandardSecurityManager.chk
    at com/ms/security/StandardSecurityManager.chkex
    at com/ms/security/StandardSecurityManager.checkConnect
    at java/net/Socket.<init>
    at java/net/Socket.<init>
    at ChatClient.sendClientchatMessage
    at ChatClient.button1ActionPerformed
    at ChatClient.access$000
    at ChatClient$1.actionPerformed
    at java/awt/Button.processActionEvent
    at java/awt/Button.processEvent
    at java/awt/Component.dispatchEventImpl
    at java/awt/Component.dispatchEvent
    at com/ms/awt/WUIPeer.handleEvent
    at com/ms/awt/WButtonPeer.handleEvent
    at java/awt/Component.postEvent
    at com/ms/ui/AwtUIHost.postEvent
    at com/ms/awt/WUIPeer.postEvent
    at com/ms/ui/UIRoot.postEvent
    at com/ms/ui/UIComponent.postEvent
    at com/ms/ui/UIStateContainer.postEvent
    at com/ms/ui/UIButton.¤
    at com/ms/ui/UIButton.mouseClicked
    at com/ms/ui/UIComponent.handleEvent
    at com/ms/ui/UIComponent.postEvent
    at com/ms/ui/UIStateContainer.postEvent
    at com/ms/ui/UIComponent.postEvent
    at com/ms/ui/UIStateComponent.postEvent
    at com/ms/ui/UIRoot.Ä
    at com/ms/ui/UIRoot.forwardEvent
    at com/ms/ui/AwtUIHost.postEvent
    at com/ms/awt/WUIPeer.postEvent
    at com/ms/ui/AwtUIHost.processEvent
    at java/awt/Component.dispatchEventImpl
    at java/awt/Container.dispatchEventImpl
    at java/awt/Component.dispatchEvent
    at java/awt/EventDispatchThread.run
Error: com.ms.security.SecurityExceptionEx[ChatClient.sendClientchatMessage]: cannot access \"223.223.223.3\":8009
Avatar billede kj-1 Nybegynder
30. april 2001 - 11:28 #6
jeg har prøbet at ændre ip adressen til hostname i det tilfælde
hostname \"thor\" istedet for \"ip\"
Avatar billede agermose Nybegynder
30. april 2001 - 11:39 #7
jeg tror du skal prøve med den fulde adresse ikke bare thor. Det har vist også en overgang været en fejl i implementationen der gjorde at \"ip\" ikke blev korrekt oversat til \"hostname\"??
Avatar billede kj-1 Nybegynder
30. april 2001 - 11:46 #8
ok hvordan skriver jeg den fulde adresse
Avatar billede kj-1 Nybegynder
30. april 2001 - 11:47 #9
hvordan kan man ikke instantisere et objekt at klassen inetAdress
Avatar billede logical Nybegynder
30. april 2001 - 14:22 #10
Jeg afprøvede din kode med en lille justering:
      String hostname = getCodeBase().getHost();
      Socket t = new Socket(hostname, 8009);

Jeg ved ikke, om det vil hjælpe din situation (Det kan jo også være en firewall, der nægter adgang til 8009).

Prøv fra kommandolinien at lave telnet servername 8009 og snak med din server. Det giver ihvertfald et signal om det.
Avatar billede delbing Nybegynder
05. maj 2001 - 15:55 #11
Den SecurityManager der kører på din server accepterer ikke dine ChatClients. Skriv din egen SecurityManager:

http://java.sun.com/docs/books/tutorial/essential/system/security.html

Der er også lidt overblik og links til en faq her: http://java.sun.com/docs/books/tutorial/applet/practical/security.html
Avatar billede kj-1 Nybegynder
07. maj 2001 - 09:45 #12
den server der kører på host er ikke opbygget som applet og derfor er der vel ikke brug for en SecurityManager på den
Avatar billede delbing Nybegynder
07. maj 2001 - 14:35 #13
Hvis du ikke vil håndtere security selv, så duer det ikke at bruge IP-adressen medmindre dine klienter har fået appletten ved at bruge den IP som URL. Så hvis de får appletten fra www.mysite.com/chat, så kan det godt være at din IP er 223.223.223.3, men det er _ikke_ godt nok at bruge den - appletten kan _kun_ connecte til www.mysite.com.
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