08. januar 2004 - 10:24Der er
14 kommentarer og 2 løsninger
Lytte til port
Jeg skal lytte til en port, hvorfra der konstant bliver sends xml-strenge. Måske helt op til 650 i sekundet. Jeg skal fange disse xml-strenge og behandle dem.
Hvordan laver jeg bedst denne "lytte og gemme" funktion.
Jeg bruger:
m_sock = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
min m_sock er forbundet og autoriseret - what next ??
Jeg takker foreløbig for info - jeg har læst på det hele dagen, men det er ikke lykkedes mig at fange nogle date fra min server forbindelse.
Her er en lille stump kode:
Byte[] temp = new byte[1]; socket.Receive(temp,1,0); int len = (int) temp[0]; byte[] RecvBytes = new byte[len]; int bytes = socket.Receive(RecvBytes,len,0); //HER STOPPER DEN UDEN FEJL..
Der sker ikke mere.. hvad kan grunden være til det ?
using System; using System.IO; using System.Net; using System.Net.Sockets;
class Server { public static void Main(string[] args) { TcpListener server = new TcpListener(IPAddress.Any, 1234); server.Start(); TcpClient client = server.AcceptTcpClient(); StreamReader rdr = new StreamReader(client.GetStream()); string line; while((line = rdr.ReadLine()) != null) { Console.WriteLine(line); } rdr.Close(); client.Close(); server.Stop(); } }
Og et matchende client program:
using System; using System.IO; using System.Net.Sockets;
class Client { public static void Main(string[] args) { TcpClient client = new TcpClient("localhost", 1234); StreamWriter wrt = new StreamWriter(client.GetStream()); for(int i = 0; i < 100; i++) { wrt.WriteLine("<arnexml>Dette er en test</arnexml>"); } wrt.Close(); client.Close(); } }
subtile> hvad mener du med at den stopper? Returnere metoden (hvis vi antager det er indholdet af en metode) eller stopper den bare der? I tilfælde den stopper er det sandsynligvis fordi den venter på at en forbindelse bliver forsøgt oprettet, altså at nogen sender noget til porten.
Jeg har testet det, godt nok med den asynkrone version af Receive, og det virker fint. Den Socket Accept returnere er den du skal bruge til at kommunikere med din klient over, den kan ikke bruges til at lave nye connections til andre klienter med. Hvis du vil det skal du kalde Accept på din oprindelige Socket igen.
Håber det hjælper, ellers må jeg lige sende noget eks. kode.
Jeg koder op imod et API som næsten ikke er dokumenteret - jeg har fået at vide at jeg skal modtage xml strenge. Det foregår ved at jeg:
<b>forbinder:</b> socket.Connect(IPEndPoint);
<b>autoriseres:</b> Jeg sender nogle forskellige byte mv og modtager en xml streng indeholdende info om at jeg er autoriseret.
<b>Herefter starter jeg en funktion:</b> Jeg sender igen nogle bytes og herved starter jeg den mekanisme der sender mig xml-strenge. Nu er problemet bare at fange dem.
arne_v > jeg bliver nødt til at modtage med samme socket som er forbundet og autoriset, men jeg vil da gerne prøve med en TcpListener blot for at se hvad der sker. API'et skulle jo gerne være sikret så alle mulige ikke kan hente informationer fra det.
sekhmet_ds > Jeg ved ikke hvorfor den stopper. Der returneres ikke noget - hverken exceptions eller data. Det kunne jo være fordi den venter på data, og så må det være fordi min simulator (som skal sende xml) ikke virker. Jeg har netop kontaktet dem som har lavet API'et. Jeg vender tilbage asap.
jeg prøvede at lave en getstream med en tcpClient og den stoppede også på samme måde. Kan det være fordi der intet sendes ?
public void test() { TcpClient client = new TcpClient("server", 1234); StreamWriter wrt = new StreamWriter(client.GetStream()); for(int i = 0; i < 100; i++) { wrt.WriteLine("<xml>Dette er en test</xml>"); } wrt.Close(); client.Close(); }
xml-data kommer flyvende i en lind strøm og jeg skal opfange dem og finde ud af hvordan jeg klipper de rigtige stumper ud - dvs fra <xml> til </xml> - Jeg er i stand til at udskrive xml-data men mine Console.Writeline(data); statements udskrive ikke een xml string af gangen men en masse blandet xml.
jeg vender tilbage med mere info så snart jeg ved mere :-(
så fik jeg det til at virke.. længden på den xml streng jeg skal motage fylder de første 4byte.. det var rart at vide !! men mange tak for forslag og hjælp.
nå det var der åbenbart ikke.. jeg forsøgte eller at gemme 25 points til dig
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.