Zdravím,
v jedné aplikaci bych chtěl komunikovat s měřícím přístrojem prostřednictvím ethernetu. Otevřel jsem si proto TCP spojení a odeslal data. Hledal jsem na internetu jakým způsobem data najakým solidním způsobem přijímat, našel jsem dost příkladů ale není mi to moc jasné. Nechtěl bych na data nikde čekat, prostě až by přišla tak bych je rád zpracoval. Uměl by někdo poradit prosím?
Díky
Ondra
Fórum › .NET
TCP protokol a příjem dat
Tomu se rika asynchroni komunikace.Zkus si najit neco na netu.
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br]
-----------------------------------------------------------[br]
Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br]
http://dannyk.aspone.cz[br]
-----------------------------------------------------------[br]
Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
To dannyk :
Díky, ten termín znám a hledal jsem. Už mi to i nějak chodí, šlo mi spíš o praktickou realizaci od lidí co to už dělali.
// !!! provizorní obsluha - odešle něco po TCP
private void button4_Click(object sender, EventArgs e)
{
string szIPSelected = "192.168.1.250";
try
{
m_socClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
string szPort = "5555";
int alPort = System.Convert.ToInt16(szPort, 10);
IPAddress remoteIPAddress = IPAddress.Parse(szIPSelected);
IPEndPoint remoteEndPoint = new IPEndPoint(remoteIPAddress, alPort);
m_socClient.Connect(remoteEndPoint);
Thread.Sleep(200);
t = new Thread(new ThreadStart(StartRecieve));
t.IsBackground = true;
t.Start();
string szData = "SENSe:DATA?\n";
byte[] byData = System.Text.Encoding.ASCII.GetBytes(szData);
m_socClient.Send(byData);
}
catch (Exception err)
{
MessageBox.Show("Chyba", "Chyba při zahájení spojení s: " + szIPSelected + " \n" + err.Message);
}
}
// funkce, která zajistí asynchronní příjem dat ze socketu
private void StartRecieve()
{
MethodInvoker miv = new MethodInvoker(this.UpdateRTB);
while (true)
{
Byte[] receive = new Byte[100] ;
try
{
// vyprázdní řetězec do kterého se dekódují přijatá data
tmp=null;
// pokusí se ze streamu přečíst data a do ret vrátí jejich počet
int ret = m_socClient.Receive(receive, receive.Length, 0);
if (ret>0)
{ // pokud je počet nenulový, zkusí je převést na řetězec
tmp = System.Text.Encoding.ASCII.GetString(receive);
if(tmp.Length > 0)
{ // pokud je převedený řetězec nenulové délky, vypíše data
this.BeginInvoke(miv);
// počká 200 ms (do té doby tolik dat nepříjde)
Thread.Sleep(200);
}
}
}
catch
{
if (!m_socClient.Connected)
{
break;
}
}
}
t.Abort();
}
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 21 hostů
Podobná vlákna
Příjem dat a jejich zobrazení ze serveru — založil Tootal
Příjem dat přes POST a uložení do DB — založil Pavelv
Parsování HTTP hlavičky a příjem POST dat — založil zavovi
TCP server, TCP klient v Linuxu — založil kocourOggy
Příjem z COM portu — založil radar.sm
Moderátoři diskuze