Autor Thema: Auf ein Neues : Winsock Control  (Gelesen 3943 mal)

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Auf ein Neues : Winsock Control
« am: 17.06.03 - 13:22:56 »

Hallo Leute,

ich versuche eine Winsock Verbindung zu einem Rechner aufzubauen. Diesmal mit dem bei in Lotus OLE Klassen
sichtbaren : Microsoft Winsock Control 6.0 (SP5)

Ich bekomme den Fehler : Adressgruppe nicht unterstützt.
Kennt das jemand ?

Ciao
Don Pasquale

Hier mein Code :

Dim Winsock1 As Variant
Dim status As Integer   

Set Winsock1 = CreateObject("MsWinsock.Winsock")
Winsock1.Close
   
For i = 1 To 1000
      
winsock1.Protocol = 1
winsock1.connect localhost,4444
Status = Winsock1.State
      
Select Case Status
         
Case 1 :
Print "1- Open"
   Winsock1.SendData("13|155|0000000020" & Chr$(10))         
      Case 2 : Print 2
      Case 3 : Print 3
      Case 4 : Print 4
      Case 5 : Print 5
      Case 6 : Print 6
      Case 7 : Print 7
      Case 8 : Print 8
      Case 9 : Print 9
      Case Else
         
End Select
winsock1.Close
Next i

Offline Hoshee

  • Administrator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 693
  • Geschlecht: Männlich
  • Try To Be Mensch ...
    • Syslords Solutions IT-Dienstleistungen
Re:Auf ein Neues : Winsock Control
« Antwort #1 am: 17.06.03 - 14:23:57 »
Yoo,

warum machst Du das denn:

Code
Set Winsock1 = CreateObject("MsWinsock.Winsock")
Winsock1.Close

Anschließend sprichst Du das Objekt wieder an. Das kann nicht funktionieren.

Gruss ...

Hoshee
Detlef

-> Syslords Solutions
*************************************
Wer dem Chef in den Hintern kriecht, muß damit rechnen, daß er ihm eines Tages zum Hals heraushängt

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:Auf ein Neues : Winsock Control
« Antwort #2 am: 17.06.03 - 14:38:04 »
Hi Hoshee,

ich bin zwar nicht ganz Deiner Meinung, aber
selbst wenn ich das Winsock.Close rausnehme ändert sich nichts.

Je nach Protocol ( 0 oder 1 ) bekomme ich einen
Status von 6 oder 9.
Und bei Beiden kann/darf ich kein SendData ausführen.

ratlos

Don Pasquale

Offline Hoshee

  • Administrator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 693
  • Geschlecht: Männlich
  • Try To Be Mensch ...
    • Syslords Solutions IT-Dienstleistungen
Re:Auf ein Neues : Winsock Control
« Antwort #3 am: 17.06.03 - 14:53:19 »
Yoo,

ich hocke zu Hause und deswegen kann ich nicht testen. Mein Noti ist von den Gören in beschlag genommen worden.

Bekommst Du bei 'winsock1.connect localhost,4444' eigentlich einen Return? Normal sollte hier doch der Handle der Socketverbindung zurückgegeben werden. Oder liege ich da falsch? Habe die Syntax nicht im Kopf.

Gruss ...

Hoshee
Detlef

-> Syslords Solutions
*************************************
Wer dem Chef in den Hintern kriecht, muß damit rechnen, daß er ihm eines Tages zum Hals heraushängt

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re:Auf ein Neues : Winsock Control
« Antwort #4 am: 17.06.03 - 14:59:41 »
Entschuldigung nur eine bescheidene Anmerkung, für solche IP Kommunikationssachen ist Lotusscript nicht gerade die erste Wahl. Viel bequemer lässt sich das mit einem Java Agenten machen. Ich steuere so z.B. die Access-Listen unser Cisco PIX Firewall über eine Notesdatenbank.  In der Java Klassenbibliothek ist nämlich Kommuniktaion über diverse IP Protokolle schon fix eingebaut und das ganze funktioniert auch in R5 schon ganz ordentlich.

Wie gesagt nur eine Anmerkungen.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:Auf ein Neues : Winsock Control
« Antwort #5 am: 17.06.03 - 15:10:17 »
@Hoshee :

Nope, kein Rückgabewert
eine Zeile wie
handle = Winsock1.Connect
gibt einen Automation Fehler

@Ralf M Petter

Hast Du vieleicht Code mit dem ich zumindest nur das obige Minimalbeispiel ausprobieren könnte ?
Also einen Verbindungsaufbau und bei erfolgreichem Connect einen String zu senden ?
Auf´s geratewohl das medium zu wechseln finde ich etwas kühn

Gruß
Don Pasquale
« Letzte Änderung: 17.06.03 - 15:20:47 von Don Pasquale »

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re:Auf ein Neues : Winsock Control
« Antwort #6 am: 17.06.03 - 15:35:28 »
Hier der Code den ich schnell zusammgestöpselt habe. Hoffe er funktioniert, denn ich habe momentan keine Zeit zum Testen.

import lotus.domino.*;
import java.net.*;
import java.io.*;
public class JavaAgent extends AgentBase {

   public void NotesMain() {
         try{
         Session session = getSession();
         AgentContext agentContext = session.getAgentContext();
         Socket s =new Socket(InetAddress.getByName("172.16.2.60"),23);
         s.setSoTimeout(2000);
         BufferedReader sInput=new BufferedReader(new InputStreamReader(s.getInputStream()));
         PrintWriter sOutput= new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
         sOutput.println("Text der verschickt wird");
         String puffer=new String();
         // in puffer steht dann die Antwort des Kommunikationspartners   
         gelesen=sInput.read(puffer);
         s.close();         
      }
   
      catch(Exception e) {
         e.printStackTrace();
      }
   }
}

Probier in einfach mal aus und poste eventuelle Probleme. Übrigens die 23 beim eröffnen der Socket Verbindung ist das Protokoll. z.B. Telnet.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Auf ein Neues : Winsock Control
« Antwort #7 am: 17.06.03 - 15:51:59 »
genau  ;D

@Ralf: [totale Kleinigkeit]: Ich glaube es ist aus irgendwelchen kleinlichen und hier vielleicht gar nicht ins Gewicht fallenden Gründen besser Socket-Verbindungen mit ByteStreams und nicht mit CharacterStreams auszulesen (weiss ungefähr wo das steht, werde nachschauen).

@all: In Kapitel 45.2 des "Handbuchs der Java-Programmierung"  (frei herunterladbar unter http://www.javabuch.de ) gibt es Erläuterungen und Beispielcode zum Thema.

 
« Letzte Änderung: 17.06.03 - 15:52:56 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re:Auf ein Neues : Winsock Control
« Antwort #8 am: 17.06.03 - 16:02:18 »
Das ist möglich, der Code stammt aus meinem ersten Java Versuch mit Lotus Notes und ist daher schon uralt, da gibt es sicher Sachen die man besser machen könnte.  Ein Problem mit den Chraktern tritt sicher dort auf, wenn auch Steurzeichen übertragen werden, das ist aber bei meinem Code nicht der Fall, da hier nur PlainText übertragen wurde.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:Auf ein Neues : Winsock Control
« Antwort #9 am: 17.06.03 - 16:58:52 »
Vielen Dank,

eine eroor Meldung habe ich :
Undefined variable gelesen
das sollte wohl ein Char werden.

Wie definiere ich Char in Java ?


Gruß
Don Pasquale

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re:Auf ein Neues : Winsock Control
« Antwort #10 am: 17.06.03 - 17:14:42 »
Sorry wie ich es mir gedacht habe, haben sich beim kopieren ein paar Fehler eingeschlichen. Hier nochmal der Code, der jetzt einwandfrei kompilieren müsste:

import lotus.domino.*;
import java.net.*;
import java.io.*;
public class JavaAgent extends AgentBase {

   public void NotesMain() {
         try{
         Session session = getSession();
         AgentContext agentContext = session.getAgentContext();
         Socket s =new Socket(InetAddress.getByName("172.16.2.60"),23);
         s.setSoTimeout(2000);
         BufferedReader sInput=new BufferedReader(new InputStreamReader(s.getInputStream()));
         PrintWriter sOutput= new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
         sOutput.println("Text der verschickt wird");
         char[] puffer=null;
         // in puffer steht dann die Antwort des Kommunikationspartners  
         int gelesen=sInput.read(puffer);
         s.close();        
      }
   
      catch(Exception e) {
         e.printStackTrace();
      }
   }
}

Damit er etwas sinnvolles macht, muß man natürlich noch die IP Adresse, Protokoll ändern und eventuell etwas sinnvolles schicken.

Grüße

Ralf
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Wie gebe ich etwas auf die Statuszeile in Lotus aus ?
« Antwort #11 am: 17.06.03 - 17:49:03 »
@Ralf

Super, da tut sich was !
Ergänzen mußte ich um die 4444 ( das ist der Port)
und um folgende Zeile
        sOutput.flush();

Das ist der aktuelle Code,
aber wie bekomme ich angezeigt was in dem Puffer steht ?
Das SENDEN funktioniert !!!

import lotus.domino.*;
import java.net.*;
import java.io.*;
public class JavaAgent extends AgentBase {

  public void NotesMain() {
        try{
        Session session = getSession();
        AgentContext agentContext = session.getAgentContext();
        Socket s =new Socket(InetAddress.getByName("localhost"),4444);
        s.setSoTimeout(60);
        BufferedReader sInput=new BufferedReader(new InputStreamReader(s.getInputStream()));
        PrintWriter sOutput= new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
        sOutput.println("1|153|0000000011\n\r");
        sOutput.flush();
      
        char[] puffer=null;
        // in puffer steht dann die Antwort des Kommunikationspartners  
        int gelesen=sInput.read(puffer);
        s.close();        
      }
 
      catch(Exception e) {
        e.printStackTrace();
      }
  }
}
« Letzte Änderung: 17.06.03 - 20:23:28 von Don Pasquale »

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re:Auf ein Neues : Winsock Control
« Antwort #12 am: 18.06.03 - 08:30:58 »
Ich habe den Code ergänzt, dass er das Ergebnis auf die Java Konsole ausgibt. Siehe Kommentar. Konnte leider nicht testen, da ich keinen Server habe der auf diesem Port in der von dir gewünschten Weise antwortet. Aber probier mal und poste eventuelle Probleme.

import lotus.domino.*;
import java.net.*;
import java.io.*;
public class JavaAgent extends AgentBase {

  public void NotesMain() {
        try{
        Session session = getSession();
        AgentContext agentContext = session.getAgentContext();
        Socket s =new Socket(InetAddress.getByName("localhost"),4444);
        s.setSoTimeout(60);
        BufferedReader sInput=new BufferedReader(new InputStreamReader(s.getInputStream()));
        PrintWriter sOutput= new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
        sOutput.println("1|153|0000000011\n\r");
        sOutput.flush();
        StringBuffer Erg=new StringBuffer();
       char[] puffer=null;
        // in puffer steht dann die Antwort des Kommunikationspartners
        // Diese wird so lange zum Ergebnis hinzugefügt, bis keine Antwort mehr kommt. Dann wird das Ergebniss über die Javakonsole ausgegeben.
        // Um diese anzuzeigen  Menü Datei>Extras>Java Debug Console
      while (sInput.read(puffer)!=-1){
         Erg.append(puffer);
      }
      System.out.println("Ergebnis: "+Erg.toString());
        s.close();      
      }
 
      catch(Exception e) {
        e.printStackTrace();
      }
  }
}
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Auf ein Neues : Winsock Control
« Antwort #13 am: 18.06.03 - 08:40:30 »
ich habe etwas scheinbar funktionierendes hinbekommen basierend auf code aus dem "Handbuch der Javaprogrammierung".

Verbinde mit Tomcat. Sende ihm über http die Nachricht von Don (was keinen Sinn macht) und erhalte eine HTTP 200 als Rückmeldung (sieht normal aus).


hier ist code (musst natürlich noch den port ändern.
Es dauert relativ lange .
WICHTIG: Um das Ergebnis und eventuelle Fehlermeldungen sehen zu können, brauchst du die Java Debug Console (File | Tools | Show Java Debug Console ... genau unter Debug Lotus Script).  
Öffne die Konsole, bevor du den Agenten startest.


Code
import lotus.domino.*;
import java.net.*;
import java.io.*;
public class JavaAgent extends AgentBase {

  public void NotesMain() {
        try{
           int len = 0;
           // notes stuff
           Session session = getSession();
           AgentContext agentContext = session.getAgentContext();
      
      // socket - Verbindung generieren. 
           Socket sock =new Socket(InetAddress.getByName("localhost"), 8080);
           InputStream in = sock.getInputStream();
      OutputStream out = sock.getOutputStream();
      
      // an Socket Verbindung schreiben. 
      out.write("1|153|0000000011\n\r".getBytes());
      out.flush();
      
      // von socket Verbindung lesen
      byte[] b = new byte[100];
          try {
            while ((len = in.read(b)) != -1)             
                 System.out.write(b, 0, len);
         } catch (InterruptedIOException e) { 
           //nochmal versuchen
         }
        sock.close();       
      }
      catch(Exception e) {
        e.printStackTrace();
      }
  }
}


das ist ein schneller hack und sicher nicht optimal

Gruss Axel

... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline Don Pasquale

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.390
  • Geschlecht: Männlich
  • Don Pasquale
    • Auf Verlorenem Posten
Re:Auf ein Neues : Winsock Control
« Antwort #14 am: 26.06.03 - 16:38:49 »
@AXEL_JANNSEN


 :) ;D :D 8)


Vielen Dank.

Nun funktioniert´s.


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz