#6 Slim
Není zač, rád jsem pomohl.
Příspěvky odeslané z IP adresy 89.24.196.–
#4 ingiraxo
Port 80 a 8080 je v některých firewallech často blokován. Možná bych se spíše podíval na to, co napsal KIIV, zda server naslouchá jakožto "localhost" a nebo pod konkrétní IP adresou. Pokud se nepletu, tak zrovna TcpListener v tomhle dělá rozdíly (už je to nějaký ten pátek, co jsem si s tím hrál)
Hmm, tak problém se opět objevil, ale tentokrát úplně někde jinde.
this.Invoke(myDelegateInputsReceived);
V tomto kroku to opět čeká a i když je tam podmínka, že myDelegateInputsReceived nesmí být null, tak mi to hlásí, že jeho hodnota je null.
#1 DragonBehemont
Díky tomu popisu, že dané vlákno je uspáno nebo čeká na ukončení jiného vlákna mne napadlo, že to může být tím příjmem dat pomocí eventu, tak jsem do eventu přidal následující podmínky.
try
{
if ((this != null) && (myDelegateInputsReceived != null))
{
if (this.Controls.Count > 0)
{
this.Invoke(myDelegateInputsReceived);
}
else
{
beckhoffPort.DiscardInBuffer();
}
}
else
{
beckhoffPort.DiscardInBuffer();
}
}
catch
{
}
Toto jsem udělal u všech eventů pro COM porty. Od té doby se tato chyba zatím neprojevila.
#1 DragonBehemont
Jen pro doplnění:
1.) Stejný problém se projevuje i na ostatních COM portech
2.) Když se ve VS podívám, kde zrovna program čeká, tak mi to hlásí, že čeká v kroku, kde se uzavírá port.
3.) Když se podívám na stav portu, tak mi VS ve watch tabulce hlásí: "Cannot evaluate expression because the current thread is in a sleep, wait, or join"
4.) Pro příjem dat využívám event DataReceived
To Smrtelnik : Nabootovat znamená to, že si vypálíš ten image (iso soubor, která sis stáhl) na CD/DVD a při spuštění jej vložíš do mechaniky (nebo před vypnutím PC) ... a díky tomu se Ti nespustí Windows, ale bootovací médium ... a pokud ne, tak pak stačí přehodit v BIOS-u pořadí pro bootování
To melmen : doporučoval bych opravdu nějakou knihovnu, ať už nette, nebo něco tomu podobného a nebo nastudovat, jak vůbec funguje protokol pro e-maily ...
tady jsou nějaké příklady (neřeší formuláře, ani nahrávání souborů na server):
http://www.webcheatsheet.com/PHP/send_email_text_html_attachment.php
http://www.texelate.co.uk/blog/send-email-attachment-with-php/
http://www.daniweb.com/web-development/php/threads/60795
Zdravím,
nebyl jsem si jist, kam toto téma přesně zařadit, tak bych chtěl předně požádat moderátory, aby ho případně zařadili dle svého uvážení.
Řeším jeden problém a to obecnou komunikaci s SQL databází. Jedná se mi o to, že bych potřeboval doporučit nějaký článek, případně specifikaci ohledně samotné komunikace s databází bez využití knihoven přímo od "výrobce" databáze. Nebo-li otázka přesněji zní, zda se dá komunikovat s databází pouze za použití socketové komunikace, bez nějakých knihoven a driverů (ODBC, atd.) a jestli existuje veřejně dostupná návod nebo specifikace ohledně protokolu.
Důvod mého dotazu je jednoduchý, řekněme, že mám PC, kde není možno využít žádný "vyšší" kompilovaný jazyk, žádné C++, ani C#, ani Pascal, nic. Jediné, v čem se dá psát program pro toto PC je v podstatě Assembler, který obsahuje funkce pro obsluhu TCP/IP spojení. (Pozn.: onen programovací jazyk není přímo Assembler, ale je mu hodně podobný) . Neznáte někdo články o této problematice? Zkoušel jsem hledat, ale výdycky mě to odkázalo na knihovny a drivery, nenašel jsem žádný návod, který by obsahoval to, co potřebuji.
To nervak : nevím, zda jsi tím myslel to, že jsem tam omylem přehozil argumenty, ale i když jsem to přehodil tak, jak by to mělo být, tak to stejně padá. A nebo si tím myslel něco konkrítního?
To KIIV : a nebo přijdou s dalším tld, kde budou prozměnu všechny stránky, kterí obsahují nelegální obsah ;-)
To z_moravec : Asi nikdo moc neřešil, jak to zajistit v praxi ...
To Martin : a nebo můžeš zkusit tohle: http://www.vbnet.cz/clanek--72-pracujeme_s_protokolem_http.aspx
Zdravím,
potřeboval bych poradit ohledně jednoho problému s pointry. Mám DLL knihovnu v C++, kde pomocí pointrů komunikuji a předávám data do aplikace. Jakmile aplikace zasílá data do knihovny, je všecko OK, dokonce i když vyčítá data, tak všecko běží tak jak má, ale jakmile se vlákno pokusí něco zapsat, tak celá aplikace spadne. Snažil jsem se něco najít na googlu, přímo na stránkách C++ i v literatuře, ale nic z toho co jsem našel nevyřešilo můj problém.
U této funkce všechno funguje tak jak má:
__declspec(dllexport) void __cdecl GetInput( HANDLE hDriver,
unsigned ChannelNumber,
TValue *InputValue )
{
//vrací stav kanálu
TextWriter^ streamWriter = gcnew StreamWriter( "furness_log.txt", true );
streamWriter->WriteLine( "Volání funkce: GetInput()" );
streamWriter->Flush();
streamWriter->Close();
TPDriver PDriver;
PDriver = (TPDriver) hDriver;
TPChannel PChannel;
PChannel = &(PDriver->Channels[ChannelNumber]);
EnterCriticalSection( &PDriver->DataCS );
switch(ChannelNumber) {
case 1:
InputValue->ValShortCard = PChannel->ChanelValue.ValShortCard;
break;
case 2:
InputValue->ValCardinal = PChannel->ChanelValue.ValCardinal;
break;
case 3:
InputValue->ValPString = PChannel->ChanelValue.ValPString;
break;
}
LeaveCriticalSection( &PDriver->DataCS );
};
Jenže u téhle funkce (vyzkoušel jsem snad všechny možnosti úprav) mi to padá
unsigned long __stdcall ThreadProc( TPDriver PDriver )
{
MSG msg;
System::IO::Ports::SerialPort _seriak;
_seriak.PortName = "COM" + PDriver->ComPort.ToString();
_seriak.ReadTimeout = 1000;
TPChannel PChannel1= &(PDriver->Channels[1]);
TPChannel PChannel2 = &(PDriver->Channels[2]);
TPChannel PChannel3 = &(PDriver->Channels[3]);
PeekMessage( &msg, 0, 0, 0, PM_REMOVE ); // create thread queue
SetEvent( PDriver->HThreadRunning );
try
{
_seriak.Open();
}
catch (Exception^ ex)
{
PChannel1->ChanelValue.ValShortCard = statusNoConnect;
PChannel2->ChanelValue.ValCardinal = 0;
strcpy("Během připojování došlo k neznámé chybě", (char *)PChannel3->ChanelValue.ValPString);
PDriver->DriverCallBack( PDriver->DriverCallBackHandle, dcfDriverException, 0 );
}
}
Ještě doplním jednotlivé definice:
struct TValue { // Value storage
struct {
unsigned Type;
union { // switch (Type)
char ValBoolean; // vtBoolean
unsigned char ValShortCard; // vtShortCard
unsigned short ValCardinal; // vtCardinal
unsigned ValLongCard; // vtLongCard
signed char ValShortInt; // vtShortInt
signed short ValInteger; // vtInteger
signed ValLongInt; // vtLongInt
float ValReal; // vtReal
double ValLongReal; // vtLongReal
tString255 *ValPString; // vtPString
struct { // vtDriverString
unsigned StringCharLength;
void *PString;
};
struct { // vtBuffer
unsigned char BType;
unsigned short BLen256;
void *PBuffer;
};
};
};
};
// chanel data structures
struct TChannel {
unsigned long Status;
double LastTime;
double ActualTime;
double Delay;
TValue ChanelValue;
double RangeFrom;
double RangeTo;
};
typedef TChannel *TPChannel;
// driver data structures
struct TDriver {
// common data
unsigned DataLength;
unsigned (__cdecl *DriverCallBack)(HANDLE, unsigned, void *);
HANDLE DriverCallBackHandle;
char ParamFileName[260];
int ComPort;
int BaudRate;
int Parity;
int DataBits;
int StopBits;
// private data
TChannel Channels[maxDriverChannels];
HANDLE HThread;
unsigned long IdThread;
HANDLE HThreadRunning;
CRITICAL_SECTION DataCS;
};
typedef TDriver *TPDriver;
Pokud je sériový port volný, tak ho otevře a bez problému s ním pracuje, jenže jakmile sériový port otevřu v jiné aplikaci, a pak se jej snažím otevřít v této knihovně, tak se to právě pokusí zapsat důvod neotevření portu a zápis do paměti přes pointry.
Jen pro upřesnění, důvodem, proč využívám v C++ .NET Framework je ten, že daleko déle pracuji s C# a jsem tudíž na .NET zvyklý. Pokud ale znáte lepší způsob, jak třeba používat sériový port, rád se poučím.
Předem děkuji za všechny náměty.
Nějakou dobu už nesleduju zprávy ani média. O co se konkrétně jedná?