Een simpel experiment

Vragen over Liberty BASIC en Netwerken of het Internet. Vertel hier uw ervaringen.

Moderator: anthonio

Een simpel experiment

Berichtdoor FrederikPot » di aug 19, 2008 3:20 pm

Hallo, misschien is het leuk om te laten zien dat Liberty Basic can communiceren met een kleine
executable(de server) via de poll.dll die ikzelf heb geschreven. Het is me niet gelukt om echt iets goed te maken.

Copieer de onderstaande code (.bas file) en verander het ipadres '10.0.0.1' in die van jouw computer. Als je het ipadres van je eigen computer niet weet , doe je in een DOS venster het commando: ipconfig

Code: Selecteer alles


WindowWidth = 300
WindowHeight = 500
nomainwin

    UpperLeftX=int((DisplayWidth-WindowWidth)/2)
    UpperLeftY=int((DisplayHeight-WindowHeight)/2)



    TexteditorColor$ = "white"
    texteditor #main.textedit4,  10, 160, 225, 225
    button #main.button1,"Send",[button1Click], UL, 235, 392,  42,  25
    button #main.button2,"Start webcam",[button2Click], UL, 235, 120,  42,  25

    TextboxColor$ = "white"
    textbox #main.textbox3,  10, 392, 215,  25
    open "Messenger" for window as #main
    print #main, "font ms_sans_serif 10"


[loop]
wait
[button2Click]


hwnd=hwnd(#main)
hw = hexdec("&H10000000") + hexdec("&H40000000")
open "avicap32.dll" for dll as #a

CallDLL #a, "capCreateCaptureWindowA",0 as long, hw as long ,0 as long,0 as long,100 as long,75 as long,hwnd as long,0 as long,result as long
''close #a
open "user32" for dll as #user32
CallDLL #user32, "SendMessageA",result as long,1034 as long,0 as long,0 as long,r as long
CallDLL #user32, "SendMessageA",result as long,1077 as long,1 as long,0 as long,r as long
CallDLL #user32, "SendMessageA",result as long,1076 as long,20 as long,0 as long,r as long
CallDLL #user32, "SendMessageA",result as long,1074 as long,1 as long,0 as long,r as long

close #user32

wait


[button1Click]

Open "C:\poll.dll" for dll as #dl


struct zs,reg as char[1000]
zs.reg.struct="10.0.0.1"
print #main.textbox3, "!contents? op$"

struct zs2,reg2 as char[1000]
zs2.reg2.struct=op$
 CallDLL #dl, "maakconnectie",zs as STRUCT,zs2 as STRUCT,r as long
 close #dl
str3$=zs.reg.struct+"---"+zs2.reg2.struct+CHR$(13)

print #main.textedit4,  str3$
wait



[quit]
  close #main
  end






Dowload de server :
http://84.244.8.225/server.exe
En download de poll.dll :
http://84.244.8.225/poll.dll

Zet de poll.dll in 'C:\poll.dll'
Start server.exe en zet wat tekst in het onderste tekstvakje en klik op Send.
Nu zie je het verschijnen in server.exe.
De code van server.exe(luistert standaar op poort 180):
Code: Selecteer alles
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <winsock.h>

extern "C"{


#pragma comment(lib,"wsock32.lib")

}


SOCKET terug;


int main(int argc,char **argv)
{
   
printf("Server gestart op poort 180 : ");


WSADATA wd;
WORD sv;
sv=MAKEWORD(1,1);
WSAStartup(sv,&wd);
SOCKET luister;
luister=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN ge;
ge.sin_family=AF_INET;
ge.sin_addr.s_addr=INADDR_ANY;
LPHOSTENT host;



host=gethostbyname("");


ge.sin_addr=*((LPIN_ADDR)*host->h_addr_list);

ge.sin_port=htons(180);

bind(luister,(LPSOCKADDR)&ge,sizeof(struct sockaddr));

sockaddr_in si;
int sil=sizeof(si);

here:

listen(luister,20);


terug=accept(luister,(struct sockaddr*)&si,&sil);

printf(" new request! ");


char leesbegin[10000]="";


recv(terug,leesbegin,10000,0);
printf(leesbegin);
strcat(leesbegin,"@from server ");

send(terug,leesbegin,8000,0);











goto here;


   
return(0);
}



De poll.dll code (verzend standaard naar poort 180):
Code: Selecteer alles

#include <afx.h>
#include <string.h>
#include <mmsystem.h>
#include <winsock.h>
#include <string.h>
extern "C"{
#pragma comment(lib,"wsock32.lib")

}




BOOL WINAPI DllEntryPoint(HINSTANCE hDLL,DWORD dwReason,LPVOID Reserved)
{
   switch (dwReason)
   {
   case DLL_PROCESS_ATTACH:
      {
      
      break;

      }
   case DLL_PROCESS_DETACH:
      {
      
      break;
      }
   }
   return true;
}


SOCKET verbinding;

extern "C"  __cdecl char maakconnectie(char* ip,char* tekst){

WSADATA wd;
WORD sv;
sv=MAKEWORD(1,1);
WSAStartup(sv,&wd);

verbinding=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN ge;
ge.sin_family=AF_INET;
ge.sin_addr.s_addr=INADDR_ANY;
LPHOSTENT host;



host=gethostbyname(ip);
ge.sin_addr=*((LPIN_ADDR)*host->h_addr_list);
ge.sin_port=htons(180);
int ver=connect(verbinding,(LPSOCKADDR)&ge,sizeof(struct sockaddr));


int s=send(verbinding,tekst,10000,0);
char data2[10000]="";
strcpy(data2,"empty");

int ont=recv(verbinding,data2,10000,0);
strcpy(tekst,data2);

return *ip,*tekst;
}




Dat was het..ik vond het niet makkelijk om een connectie open te houden in Liberty Basic...
Misschien dat het wel kan.. ik ga mogelijk nog bekijken of het via ShellExecute en telnet.exe een verbinding open kan blijfen. De server.exe zou je kunnen uitbouwen tot een zogenaamde pollserver (steeds bv om de seconde even data opvragen als er iets veranderd is).
Succes !
Groeten,
Frederik :shock:
FrederikPot
 
Berichten: 14
Geregistreerd: vr aug 15, 2008 11:31 pm

Keer terug naar Internet en Netwerken

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast

cron