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
