Jag skriver ett program i Borland C som sparas på en stand-alone-PC med MiniOS7 Exakt hur fungerar resten? Hej Niklas!http-call syns ej i loggen på IIS servern
(i7188EA http://www.icpdas.com/products/7188/i-7188ea.htm)
Jag vill göra ett http-call till min Win2000 IIS server.
Första http-callet syns i loggen men inte nästkommande. Varför?
Gör http-call med följande programrad;
sprintf(OutBuf,"GET /test/default.asp?id=%d&sendcount=%d HTTP/1.0 \n\n\0",
port ,sendcount);
Varje gång jag stänger av min i7188EA och sätter på den igen så syns det i loggen, precis som att den inte släpper riktigt. Lika dant om jag väntar en lång stund så fungerar det igen.
Noterar samma problem om jag gör samma sak via Explorern. Första http-callet registreras men inte nästkommande såvida jag inte öppnar en ny explorer eller trycker Ctrl + F5. Mitt program kräver att samtliga http-call registreras. Vad göra?Sv: http-call syns ej i loggen på IIS servern
För det där är ju bara för att lägga strängen i OutBuf.
Kan det inte vara så att bufferten inte flushas, på något sätt?
Tyvärr var det så länge sen jag använde C för att komma ihåg vad det kan heta. Lite mer kod vill vi nog se.Sv: http-call syns ej i loggen på IIS servern
Skickar med funktionen jag använder för att göra själva http-anropet.
Vet inte om du får något ut av koden eftersom den är skriven för ett speciellt operativsystem MiniOS7, men uppskattar verkligen ditt engagemang!
/Daniel
SocketSend(int port) {
char OutBuf[1023];
int err, client;
extern unsigned char MacAddress[];
RefreshWDT();
client=SocketPreparationFunction();
RefreshWDT();
SocketConnectionFunction(client);
GetMac(MacAddress);
/*1 + MAC-address (numeric), Port, Value, SendCount */
/* sprintf(OutBuf,"GET /vcbs/default.asp?id=%d&sendcount=%d HTTP/1.1 \n\n\0", port ,sendcount);*/
sprintf(OutBuf,"1%03d%03d%03d%03d%03d%03d;%d;%d;%d\n\r", MacAddress[0], MacAddress[1], MacAddress[2], MacAddress[3], MacAddress[4], MacAddress[5], port, sent[port], sendcount);
err = writesocket( client, OutBuf, strlen(OutBuf));
Print("[No %d] Sending value %d on port %d. Send string:%sSend confirmation:%d\n\r", sendcount, sent[port], port, OutBuf, err);
sendcount++;
Print("Close socket\n\r\n\r");
closesocket(client);
Nterm();
}
int SocketPreparationFunction() {
int client, err=0;
Print("Prepare Socket\n\r");
/***************************************
* mandatory Network Environment *
***************************************/
err = Ninit(); /* initiate host environment */
if (err < 0) {
Print("Ninit() failed! error %d\n\r", err);
return err;
}
err = Portinit("*"); /* initiate network device */
if (err < 0) {
Print("Portinit() failed! error %d\n\r", err);
Nterm();
return err;
}
err = client = socket(PF_INET, SOCK_STREAM, 0); /* TCP/IP */
if (client < 0) {
Print( "Can't create socket! error %d\n\r", err );
Nterm();
return err;
}
/* addressing for master socket */
Print("Addressing for master socket\n\r");
memset( &sin, 0, sizeof(sin) ); /* bzero is a unix system call */
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = inet_addr(ipaddr);
sin.sin_port = htons(SERVICE);
return client;
}
SocketConnectionFunction(int client) {
unsigned long t1;
int ConnectSuccess;
int cntConnectFail=0;
extern unsigned char MacAddress[];
extern unsigned char NewIP[];
extern unsigned char NewMask[];
extern unsigned char NewGateway[];
SOCKET_NOBLOCK(client);
ConnectSuccess=0;
while(ConnectSuccess==0){
t1=*TimeTicks;
if (connect(client, (struct sockaddr *)&sin, sizeof(sin))) { /* on success return 0 */
extern int errno;
unsigned cnt=0;
Print("Create socket\n\r");
if(errno==EINPROGRESS){
#define ConnectTimeout 4000
while(*TimeTicks-t1<ConnectTimeout){
RefreshWDT();
YIELD();
CheckInports();
Print("Socket connect trials \r[%u] ",++cnt);
if(SOCKET_ISOPEN(client)){
ConnectSuccess=1;
break;
}
}
if (!ConnectSuccess){
Print("Connect %d failed. Remote server is not available. time=%lu ms,state=%d\n\r",cntConnectFail++,*TimeTicks-t1,connblo[client].state);
if (cntConnectFail==3) {
GetMac(MacAddress);
GetIp(NewIP);
GetMask(NewMask);
GetGateway(NewGateway);
sprintf(Message,"i7188EA Remote server not available\n\rMAC (hex): %02x:%02x:%02x:%02x:%02x:%02x\n\rMAC (1 + numeric): 1%03d%03d%03d%03d%03d%03d\n\rIP: %d.%d.%d.%d\r\nMask: %d.%d.%d.%d\r\nGW: %d.%d.%d.%d", MacAddress[0], MacAddress[1], MacAddress[2], MacAddress[3], MacAddress[4], MacAddress[5], MacAddress[0], MacAddress[1], MacAddress[2], MacAddress[3], MacAddress[4], MacAddress[5], NewIP[0], NewIP[1], NewIP[2], NewIP[3], NewMask[0], NewMask[1], NewMask[2], NewMask[3], NewGateway[0], NewGateway[1], NewGateway[2], NewGateway[3]);
SMTPfunction(Message); /* Send mail */
}
}
}
else {
Print("Connect %d failed (Return 1): %d,time=%lu ms\n\r", cntConnectFail++,errno,*TimeTicks-t1);
if (errno==-15) return 1; /* Meaning what? */
else return 1;
}
}
}
Print("\n\rConnect success, time=%lu ms\n\r",*TimeTicks-t1);
if (cntConnectFail>3) {
GetMac(MacAddress);
GetIp(NewIP);
GetMask(NewMask);
GetGateway(NewGateway);
sprintf(Message,"i7188EA connection problem\n\rMAC (hex): %02x:%02x:%02x:%02x:%02x:%02x\n\rMAC (1 + numeric): 1%03d%03d%03d%03d%03d%03d\n\rIP: %d.%d.%d.%d\r\nMask: %d.%d.%d.%d\r\nGW: %d.%d.%d.%d\n\r%d failed conn.", MacAddress[0], MacAddress[1], MacAddress[2], MacAddress[3], MacAddress[4], MacAddress[5], MacAddress[0], MacAddress[1], MacAddress[2], MacAddress[3], MacAddress[4], MacAddress[5], NewIP[0], NewIP[1], NewIP[2], NewIP[3], NewMask[0], NewMask[1], NewMask[2], NewMask[3], NewGateway[0], NewGateway[1], NewGateway[2], NewGateway[3], cntConnectFail);
SMTPfunction(Message); /* Send mail */
}
}