BNetEx
Übersicht

Gehe zu Seite Zurück 1, 2, 3 ... 9, 10, 11, 12, 13 Weiter
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vermutlich hast du eine Variable namens msg bereits einmal verwendet, irgendwo im Code, aber nicht als String. | ||
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich habe mal ne Frage zu Netztwerk Adaptern. Und zwar, wenn ich Code: 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() Code einfach ins Programm einfügen und anstelle von stream.connect() TCPConnect(stream,timeout) aufrufen Code: 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was mir gerade aufgefallen ist: in bsd.c fehlen 2 included, deshalb kommt dort:
Code: /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: #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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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: 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
wirklich gar kein Rat? | ||
www.myspace.com/oliverpuetz -> Mein Instrumentalprojekt |
![]() |
Vertex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
geh mal in bsd.c rein und tausche die Reihenfolge der beiden oberen Zeilen von Code: #include <net/if.h>
#include <sys/socket.h> zu Code: #include <sys/socket.h>
#include <net/if.h> Kannst ja mal schreiben, ob das funktioniert. mfg olli |
||
vertex.dreamfall.at | GitHub |
![]() |
oware |
![]() Antworten mit Zitat ![]() |
---|---|---|
nischt. schade ![]() 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: ioctl(Socket, SIOCGIFHWADDR, pInterface);
genaugenommen an dem SIOCGIFHWADDR... |
||
www.myspace.com/oliverpuetz -> Mein Instrumentalprojekt |
![]() |
BlitzMoritz |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! ![]() 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 ![]() |
||
![]() |
hamZtaAdministrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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: #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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
hrrrr ![]() ![]() ![]() |
||
www.myspace.com/oliverpuetz -> Mein Instrumentalprojekt |
![]() |
BlitzMoritz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auch von meiner Seite Gratulation für die prompte Reaktion - funktioniert jetzt einwandfrei!
Und vielen Dank, Vertex, für das schöne Modul ![]() |
||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
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: Import vertex.bnetex 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: Socket = socket_(AF_INET_, SOCK_RAW_, IPPROTO_ICMP) Ein Code: 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst als normaler user nicht pingen, das geht nur unter Windows. Das Ping-Programm ist nicht zu unrecht mit suid root versehen. | ||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
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
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group