Der er i øvrigt ingen grund til at benytte specielle tegn som § og $ til at angive linjeskift og slutning af stream, det klare automatisk - linjeskiftet ("\n") sendes automatisk med hvis strengen indeholder det.
public static string DoSocketGet(string server) { //Sets up variables and a string to write to the server Encoding ASCII = Encoding.ASCII; string Get = "GET / HTTP/1.1\r\nHost: " + server + "\r\nConnection: Close\r\n\r\n"; Byte[] ByteGet = ASCII.GetBytes(Get); Byte[] RecvBytes = new Byte[256]; String strRetPage = null;
// IPAddress and IPEndPoint represent the endpoint that will // receive the request. // Get the first IPAddress in the list using DNS. IPAddress hostadd = Dns.Resolve(server).AddressList[0]; IPEndPoint EPhost = new IPEndPoint(hostadd, 80);
//Creates the Socket for sending data over TCP. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp );
// Connects to the host using IPEndPoint. s.Connect(EPhost); if (!s.Connected) { strRetPage = "Unable to connect to host"; } else { // Sends the GET text to the host. s.Send(ByteGet, ByteGet.Length, SocketFlags.None);
// Receives the page, looping until all bytes are received Int32 bytes = s.Receive(RecvBytes, RecvBytes.Length, 0); strRetPage = "Default HTML page on " + server + ":\r\n"; strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
/* Damn! Jeg har lige kørte en række tester på både sockets og streams, og faktisk har alle tester vist at læse det som streams, har bedre performance end sockets....
Derfor, såfremt der er andre der skal bruge det, har jeg vedlagt den fulde kode til en effektiv stream håndtering.... */ using System; using System.Net.Sockets; using System.Net; using System.IO;
namespace WebControl { /// <summary> /// Summary description for Streams. /// </summary> public class Streams { public static string getStream(string server, int port, string textToSent) { string result = ""; TcpClient Client = null; NetworkStream netStream = null; StreamWriter writer = null; StreamReader reader = null; try { Client = new TcpClient(server, port); netStream = Client.GetStream();
if(netStream.CanWrite) { writer = new StreamWriter(netStream); writer.Write(textToSent); writer.Flush(); //writer.Close();
if(netStream.CanRead) { reader = new StreamReader(netStream); result = reader.ReadToEnd().ToString(); //reader.Close(); } else { result += netStream.DataAvailable.ToString(); result += "The stream is not readable!"; } } else { result = "The stream is not writable!"; } } catch (Exception e) { result = e.ToString(); } finally { netStream.Close(); Client.Close(); } return result; } } }
/* God fornøjelse! */
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.