Forums Neueste Beiträge
 

Socket Client; für Debug zwecke

03/07/2009 - 22:17 von Andreas Ott | Report spam
Hallo,

2 Fragen.
Ich brauch eine Socket Client der mir die Telegramme aufzeichnet,
sprich permanent auf Horchen ist. / Pollen ist.

Sieht jemand unten einen Fehler?

ich komme immer hier rein.

catch (Exception e)
{
Console.WriteLine(e.Message);
}

Grüße Andreas

http://www1.minpic.de/bild_anzeigen...06&key297490&ende
müsste doch so gehen, Paramterübergabe, oder?


namespace ClientForDebgTest
{
class Program
{
static void Main(string[] args)
{
if ((args.Length < 1) || (args.Length > 3))
{
throw new ArgumentException("Parameters: <Word>
[<Server>] [<Port>]");
}

byte[] byteBuffer = Encoding.ASCII.GetBytes(args[0]);

// Verwende den angegebenen Host, ansonsten nimm den
lokalen Host
string server = (args.Length == 2) ? args[1].ToString() :
Dns.GetHostName();
// Verwende den angegebenen Port, ansonsten nimm den
Standardwert 7
int servPort = (args.Length == 3) ? Int32.Parse(args[2]) : 7;

TcpClient client = null;
NetworkStream netStream = null;

try
{
// Erzeuge neuen Socket der an den Server und Port
gebunden ist
client = new TcpClient(server, servPort);

Console.WriteLine("Connected to server... sending echo
string");

netStream = client.GetStream();

// Sende den kodierten string an den Server
//netStream.Write(byteBuffer, 0, byteBuffer.Length);

Console.WriteLine("Sent {0} bytes to server...",
byteBuffer.Length);

int totalBytesRcvd = 0; // Anzahl der empfangenen Bytes
int bytesRcvd = 0; // Anzahl der empfangenen
Bytes beim letzten
// Aufruf von Read()

// Denselben string wieder vom Server empfangen
while (totalBytesRcvd < 1000) //byteBuffer.Length)
{
if ((bytesRcvd = netStream.Read(byteBuffer,
totalBytesRcvd,
byteBuffer.Length - totalBytesRcvd)) == 0)
{
Console.WriteLine("Connection closed
prematurely.");
break;
}
totalBytesRcvd += bytesRcvd;
}

Console.WriteLine("Received {0} bytes from server:
{1}", totalBytesRcvd,
Encoding.ASCII.GetString(byteBuffer,
0, totalBytesRcvd));

}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
netStream.Close();
client.Close();
}
}
}
}
 

Lesen sie die antworten

#1 Frank Dzaebel
04/07/2009 - 08:06 | Warnen spam
Hallo Andreas,

[...] Socket Client [...] permanentes Pollen [...]
Sieht jemand unten einen Fehler?
ich komme immer hier rein [...] ->Exception
[...] client = new TcpClient(server, servPort);



Hier kann Du eine Exception bekommen, wenn
der "server" nicht gestartet ist. Wenn Du "horchen"
willst, solltest Du einen *TcpListener* (oder aufwendiger
einen Socket) nehmen, auch, wenn das normal die
Funktionaltàt eines Servers ist.

Hier ein mögliches Schema für die Implementation:

[Client-Server Kommunikation mit dem TcpClient und TcpListener]
http://dzaebel.net/TcpClientServer.htm
z.B. [Download .NET 2.0 Server nicht UI-blockierend.]
(bei Windows Forms kann man u.a. entweder asynchrone
Sockets nehmen, oder synchrone, und die blockierenden
Befehle in Threads aufrufen, damit das UserInterface
weiterhin Events verarbeiten kann)


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen