BNetEx

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu Seite Zurück  1, 2, 3 ... 9, 10, 11, 12, 13  Weiter

Neue Antwort erstellen

BtbN

BeitragDi, Jan 06, 2009 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Vermutlich hast du eine Variable namens msg bereits einmal verwendet, irgendwo im Code, aber nicht als String.

Der Eisvogel

BeitragSo, März 01, 2009 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, irgendwie geht bei mir da nix.
Wenn ich den TCP-Server starte, dann sagt "Can't create local port"
Ich habe keine blassen Schimmer warum und was der bringt.
Und ne deutsche Hilfe-Datei habe ich auch noch nicht gefunden Sad
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

klin

BeitragFr, März 27, 2009 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich habe mal ne Frage zu Netztwerk Adaptern.
Und zwar, wenn ich
Code: [AUSKLAPPEN]
TNetwork.GetAdapterInfo(Info)
benutzte, bekomme ich ja nur die Information von dem ersten Adapter. Aber wie kann ich ALLE Adaptern abfragen? Ich brauche ja nur die Broadcast IP's.

THX
MFG
Klin
 

m a j o r

BeitragMi, Mai 06, 2009 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

hab diesen Thread per Zufall nochmal nach einer Ewigkeit überflogen und gesehen, dass anscheinend ein paar Leute immer noch auf eine Connect-TimeOut Funktion warten. Ich habe mir vor längerer Zeit mal eine zurechtgeschrieben und kopiert da ich eine brauchte. Ich hoffe mal es stört niemanden wenn ich die hier poste.

Falls das Ganze inzwischen schon offiziel vorhanden ist hab ichs net mitbekommen.. dann einfach Bescheid sagen und ich löschs Wink


Code einfach ins Programm einfügen und anstelle von stream.connect() TCPConnect(stream,timeout) aufrufen

Code: [AUSKLAPPEN]
Extern "win32"
   Function ioctl_:Int(Socket:Int, Command:Int, Arguments:Byte Ptr)..
   = "ioctlsocket@12"
   Function WSAGetLastError:Int()="WSAGetLastError@0"
   Function selectex_:Int(ReadCount:Int, ReadSockets:Int Ptr,..
   WriteCount:Int, WriteSockets:Int Ptr, ExceptCount:Int,..
   ExceptSockets:Int Ptr, Milliseconds:Int) = "select_"
End Extern

 


Function TCPConnect:Int(t:TTcpStream,timeout:Int=1000) 'timeout in ms

   Const FIONBIO = $8004667E
   Const WSAEWOULDBLOCK = 10035
   Const AF_INET=2
   Const SOCKET_ERROR=-1
   Local Address:Int

   If t.Socket = SOCKET_ERROR Then Return False

   Address = htonl_(t.RemoteIP)

   Local option:Int=1
   
   'call ioctlsocket, set socket nonblocking
   ioctl_(t.socket, FIONBIO, Varptr(option))
   
   'connect
   connect_(t.Socket, Varptr(Address), AF_INET, 4, t.RemotePort)

   'expecting WSAWOULDBLOCK here
   If WSAGetLastError()<>WSAEWOULDBLOCK Then Return False
   
   Local result:Int,x:Int=t.socket

     '...have a cup of tea
   result=selectex_(0, Null, 1, Varptr(x), 0, Null, timeout)
            
   If result=0 Then Return False 'timed out                  

   option=0
   ioctl_(t.socket, FIONBIO, Varptr(option)) 'set socket back to normal mode

   Return True

   
End Function



Achja, übrigens super Mod Vertex!

BtbN

BeitragSo, Jun 07, 2009 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Was mir gerade aufgefallen ist: in bsd.c fehlen 2 included, deshalb kommt dort:

Code: [AUSKLAPPEN]
/home/btbn/Programme/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:29: warning: implicit declaration of function ‘ioctl’
/home/btbn/Programme/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:31: warning: implicit declaration of function ‘close’


Lösung dafür:

Code: [AUSKLAPPEN]
#include <unistd.h>
#include <sys/ioctl.h>


Mit bei die includes packen. Ohne das wird das nicht funktionieren.


An m a j o r: Super... Damit funktioniert das dann nur noch unter Windows, was nicht im Sinne des Erfinders ist.
 

m a j o r

BeitragFr, Jul 31, 2009 1:03
Antworten mit Zitat
Benutzer-Profile anzeigen
ich kann an meinem posting jetzt nichts verwerfliches erkennen. dass dieser code nicht in dem offiziellen modul so drin steht gibt ja durchaus sinn um die kompabilität zu gewährleisten. aber das ganze kann man meiner meinung nach als kleine randnotiz hier stehen zu lassen für leute, die bnetex für windowsprogramme nutzen und eine möglichkeit suchen, einen connect mit timeout durchzuführen. oder hast du da irgendwelche einwände?

oware

BeitragDo, Dez 17, 2009 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab ehrlich gesagt keine Lust jetzt 10 Seiten zu durchsuchen, darum Schande über mein Haupt wenn die Frage schonmal gestellt wurde. Und zwar bekomme ich immer den Fehler wenn ich BNetEx kompilieren möchte (MacOSX):
Code: [AUSKLAPPEN]
Building Modules
Compiling:bsd.c
In file included from /Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:2:
/usr/include/net/if.h:259: error: field 'ifru_addr' has incomplete type
/usr/include/net/if.h:260: error: field 'ifru_dstaddr' has incomplete type
/usr/include/net/if.h:261: error: field 'ifru_broadaddr' has incomplete type
/usr/include/net/if.h:298: error: field 'ifra_addr' has incomplete type
/usr/include/net/if.h:299: error: field 'ifra_broadaddr' has incomplete type
/usr/include/net/if.h:300: error: field 'ifra_mask' has incomplete type
/usr/include/net/if.h:374: error: field 'addr' has incomplete type
/usr/include/net/if.h:375: error: field 'dstaddr' has incomplete type
/Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c: In function 'GetNetworkAdapter':
/Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:47: error: 'SIOCGIFHWADDR' undeclared (first use in this function)
/Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:47: error: (Each undeclared identifier is reported only once
/Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:47: error: for each function it appears in.)
/Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:48: error: 'struct ifreq' has no member named 'ifr_hwaddr'
/Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:50: error: 'struct ifreq' has no member named 'ifr_netmask'
/Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:50: error: 'struct ifreq' has no member named 'ifr_netmask'
/Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:50: error: 'struct ifreq' has no member named 'ifr_netmask'
/Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:50: error: 'struct ifreq' has no member named 'ifr_netmask'
/Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:50: error: 'struct ifreq' has no member named 'ifr_netmask'
/Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c:50: error: 'struct ifreq' has no member named 'ifr_netmask'
Build Error: failed to compile /Applications/BlitzMax/mod/vertex.mod/bnetex.mod/bsd.c
Process complete


Irgendeine Idee?

TiA
oware
www.myspace.com/oliverpuetz -> Mein Instrumentalprojekt

oware

BeitragSo, Dez 20, 2009 10:20
Antworten mit Zitat
Benutzer-Profile anzeigen
wirklich gar kein Rat?
www.myspace.com/oliverpuetz -> Mein Instrumentalprojekt

Vertex

BeitragSo, Dez 27, 2009 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

geh mal in bsd.c rein und tausche die Reihenfolge der beiden oberen Zeilen von
Code: [AUSKLAPPEN]
#include <net/if.h>
#include <sys/socket.h>

zu
Code: [AUSKLAPPEN]
#include <sys/socket.h>
#include <net/if.h>


Kannst ja mal schreiben, ob das funktioniert.

mfg olli
vertex.dreamfall.at | GitHub

oware

BeitragMo, Dez 28, 2009 15:46
Antworten mit Zitat
Benutzer-Profile anzeigen
nischt. schade Sad
hab das neueste xcode, neustes bmx (1.36) und snow leopard. irgendeine unverträglichkeit?

EDIT: hab nochmal was rumprobiert, scheint an der zeile zu liegen:
Code: [AUSKLAPPEN]
ioctl(Socket, SIOCGIFHWADDR, pInterface);

genaugenommen an dem SIOCGIFHWADDR...
www.myspace.com/oliverpuetz -> Mein Instrumentalprojekt

BlitzMoritz

BeitragMo, Dez 28, 2009 22:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir klappts ebenso nicht, das ist sehr ärgerlich. Die Fehlermeldung ist etwas länger, aber wohl analog zu oware:
Zitat:
Compiling:bsd.c
In file included from /Applications/BlitzMax_1.33/mod/vertex.mod/bnetex.mod/bsd.c:2:
/usr/include/net/if.h:259: error: field ‘ifru_addr’ has incomplete type
/usr/include/net/if.h:260: error: field ‘ifru_dstaddr’ has incomplete type
/usr/include/net/if.h:261: error: field ‘ifru_broadaddr’ has incomplete type
/usr/include/net/if.h:298: error: field ‘ifra_addr’ has incomplete type
/usr/include/net/if.h:299: error: field ‘ifra_broadaddr’ has incomplete type
/usr/include/net/if.h:300: error: field ‘ifra_mask’ has incomplete type
/usr/include/net/if.h:374: error: field ‘addr’ has incomplete type
/usr/include/net/if.h:375: error: field ‘dstaddr’ has incomplete type
/Applications/BlitzMax_1.33/mod/vertex.mod/bnetex.mod/bsd.c: In function ‘GetNetworkAdapter’:
/Applications/BlitzMax_1.33/mod/vertex.mod/bnetex.mod/bsd.c:45: error: ‘SIOCGIFHWADDR’ undeclared (first use in this function)
/Applications/BlitzMax_1.33/mod/vertex.mod/bnetex.mod/bsd.c:45: error: (Each undeclared identifier is reported only once
/Applications/BlitzMax_1.33/mod/vertex.mod/bnetex.mod/bsd.c:45: error: for each function it appears in.)
/Applications/BlitzMax_1.33/mod/vertex.mod/bnetex.mod/bsd.c:46: error: ‘struct ifreq’ has no member named ‘ifr_hwaddr’
/Applications/BlitzMax_1.33/mod/vertex.mod/bnetex.mod/bsd.c:48: error: ‘struct ifreq’ has no member named ‘ifr_netmask’
/Applications/BlitzMax_1.33/mod/vertex.mod/bnetex.mod/bsd.c:48: error: ‘struct ifreq’ has no member named ‘ifr_netmask’
/Applications/BlitzMax_1.33/mod/vertex.mod/bnetex.mod/bsd.c:48: error: ‘struct ifreq’ has no member named ‘ifr_netmask’
/Applications/BlitzMax_1.33/mod/vertex.mod/bnetex.mod/bsd.c:48: error: ‘struct ifreq’ has no member named ‘ifr_netmask’
/Applications/BlitzMax_1.33/mod/vertex.mod/bnetex.mod/bsd.c:48: error: ‘struct ifreq’ has no member named ‘ifr_netmask’
/Applications/BlitzMax_1.33/mod/vertex.mod/bnetex.mod/bsd.c:48: error: ‘struct ifreq’ has no member named ‘ifr_netmask’

Da muss es doch unbedingt Abhilfe vom Modul-Ersteller geben! Wink
Es wäre schade, wenn ich ein neues Projekt, an dem ich gerade arbeite, und das dieses Modul unbedingt braucht, nicht auch für Mac OS kompiliert werden könnte Sad

hamZta

Administrator

BeitragDi, Dez 29, 2009 0:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab ich dir für OSX dafür nichtmal einen Fix geschickt, vertex? Oder war das ein anderes Problem? Afaik hatte das damals mit ioctl zu tun.
Blog.

Vertex

BeitragDi, Dez 29, 2009 1:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau hamZta, habe Deinen Fix zum Glück noch in den privaten Nachrichten finden können. Da ich es nicht testen kann, hier der komplette Code. Zumindest sind die Includes in der richtigen Reihenfolge.
Code: [AUSKLAPPEN]
#include <string.h>
#include <sys/sockio.h>
#include <sys/socket.h>
#include <netinet/in.h>

#ifdef __APPLE__
# include <net/if.h>
# include <ifaddrs.h>
#include <net/if_dl.h>
#else
# include <linux/sockios.h>
#endif

#define MAX_INTERFACES 64

#define TRUE 1
#define FALSE 0

int GetNetworkAdapter(char *Device, char MAC[6], int *Address, int *Netmask, int *Broadcast)
{

   #ifdef __APPLE__
      struct ifaddrs *ifap = NULL, *tempIfAddr = NULL;
      void *tempAddrPtr = NULL;
      char addressOutputBuffer[INET6_ADDRSTRLEN];
      struct sockaddr_dl *sdl = NULL;
      
      if (!getifaddrs(&ifap))
         return FALSE;
      
      for(tempIfAddr = ifap; tempIfAddr != NULL; tempIfAddr = tempIfAddr->ifa_next)
      {
       // IPv4 only
         if (strncmp(tempIfAddr->ifa_name, "en", 2) == 0 && tempIfAddr->ifa_addr->sa_family == AF_INET)
         {
            tempAddrPtr = &((struct sockaddr_in *)tempIfAddr->ifa_addr)->sin_addr.s_addr;
               
            strcpy(Device, tempIfAddr->ifa_name);
            *Address = tempAddrPtr;
            
            if(tempIfAddr->ifa_netmask != NULL)
            {
               tempAddrPtr = &((struct sockaddr_in *)tempIfAddr->ifa_netmask)->sin_addr.s_addr;
               
               *Netmask = tempAddrPtr;
               *Broadcast = *Address | ~(*Netmask);
               freeifaddrs(ifap);
               return TRUE;
            }
            
            // get mac address
            sdl = (struct sockaddr_dl *)tempIfAddr->ifa_addr;
            if (sdl)
            {
               memcpy(MAC, LLADDR(sdl), sdl->sdl_alen);
            }
         }
    }
    freeifaddrs(ifap);
   #else
      int            Socket;
      struct ifreq  *pInterface;
      struct ifconf  Config;
      struct ifaddrs *ifap;
      char           Buffer[MAX_INTERFACES*sizeof(struct ifreq)];
      int            Count, I;
   
      Socket = socket(AF_INET, SOCK_DGRAM, 0);
      if(Socket == -1) return FALSE;
   
      Config.ifc_len = sizeof(Buffer);
      Config.ifc_buf = Buffer;
      if(ioctl(Socket, SIOCGIFCONF, &Config) != 0)
      {
         close(Socket);
         return FALSE;
      }
      
      
      Count = Config.ifc_len/sizeof(struct ifreq);
      pInterface = Config.ifc_req;
   
      for(I = 0; I < Count; I++)
      {
         if(pInterface->ifr_addr.sa_family == AF_INET &&
             strncmp(pInterface->ifr_name, "eth", 3) == 0)
         {
            strcpy(Device, pInterface->ifr_name);
            *Address = ntohl(((struct sockaddr_in *)&pInterface->ifr_addr)->sin_addr.s_addr);
            
            ioctl(Socket, SIOCGIFHWADDR, pInterface);
            memcpy(MAC, &pInterface->ifr_hwaddr.sa_data, 6);
            ioctl(Socket, SIOCGIFNETMASK, pInterface);
            *Netmask = ntohl(((struct sockaddr_in *)&pInterface->ifr_netmask)->sin_addr.s_addr);
            
            *Broadcast = *Address | ~(*Netmask);
   
            close(Socket);
            return TRUE;
         }
   
         pInterface++;
      }
      close(Socket);
   #endif

   
   return FALSE;
}


mfg olli
vertex.dreamfall.at | GitHub

oware

BeitragDi, Dez 29, 2009 11:22
Antworten mit Zitat
Benutzer-Profile anzeigen
hrrrr Very HappyVery Happy es klappt Smile Danke!
www.myspace.com/oliverpuetz -> Mein Instrumentalprojekt

BlitzMoritz

BeitragDi, Dez 29, 2009 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch von meiner Seite Gratulation für die prompte Reaktion - funktioniert jetzt einwandfrei!
Und vielen Dank, Vertex, für das schöne Modul Smile

ChaosCoder

BeitragMo, Jan 18, 2010 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey,

habe ein Problem beim Senden von Pings unter Mac OS X...
Hat iwer auch ein Problem damit? Nutze natürlich die letzte Version von BlitzMax und bnetex und auch das neuste Snow Leopard 10.6.2

BlitzMax: [AUSKLAPPEN]
Import vertex.bnetex

Local data:Byte[] = [Byte(1)]
Local dataptr:Byte Ptr = data

Print TNetwork.Ping(TNetwork.getHostIP("http://www.google.de"),dataptr,1) 'www.google.de, google.de, etc.... nichts geht


Allein das gibt -1 zurück und ich hab mal geschaut, welches Return das in der Methode Ping zurückgibt und es ist das erste:
BlitzMax: [AUSKLAPPEN]
Socket = socket_(AF_INET_, SOCK_RAW_, IPPROTO_ICMP)
If Socket = INVALID_SOCKET_ Then Return -1

Ein Code: [AUSKLAPPEN]
ping google.de
per Terminal klappt natürlich super und die Ping Methode funktioniert auch unter Windows.

Weiß irgendjemand Rat?
Projekte: Geolaria | aNemy
Webseite: chaosspace.de

BtbN

BeitragMo, Jan 18, 2010 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Unter Unixoiden systemen darf nur der superuser einen ICMP socket erstellen und nutzen. Da MacOS auch ein Unix ist, wird es dort nicht viel anders sein.

ChaosCoder

BeitragMo, Jan 18, 2010 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Also geht TNetwork.Ping() garnicht in meinem Programm oder muss ich irgendwo iwas ändern, damit's funktioniert?

Und jetzt noch ein Tipp dazu, wie ich das umsetzen kann einen Server vor dem Aufbau eines TCP-Streams vorher anzupingen (mit nettem Timeout um den User nicht lange warten zu lassen). Unter Windows verursachen die Methoden für das Verbinden mit dem Server wenn dieser nicht erreichbar ist eine mehrsekündige Verzögerung... und Vertex sagte bereits vor einigen Seiten, dass die Connect() Methode sich nicht über die SetTimeouts-Funktion steuern lässt...

Kann doch grad nicht sein, dass es nicht anders geht, oder?
Projekte: Geolaria | aNemy
Webseite: chaosspace.de

BtbN

BeitragMo, Jan 18, 2010 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst als normaler user nicht pingen, das geht nur unter Windows. Das Ping-Programm ist nicht zu unrecht mit suid root versehen.

ChaosCoder

BeitragMo, Jan 18, 2010 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Das heißt, es gibt keine andere Möglichkeit einen Server anzupingen (unter Unix)?

Kriege ich es iwie hin, dass so ein Adminlogin-Fenster unter MacOSX erscheint, wodurch das Programm dann Adminrechte zum Ausführen solcher Befehle bekommt?

Oder habt ihr eine andere Idee?
Projekte: Geolaria | aNemy
Webseite: chaosspace.de

Gehe zu Seite Zurück  1, 2, 3 ... 9, 10, 11, 12, 13  Weiter

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group