Csharp/C Sharp/Network/TCP Client

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Async Tcp Client

/*
C# Network Programming 
by Richard Blum
Publisher: Sybex 
ISBN: 0782141765
*/
using System;
using System.Drawing;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Windows.Forms;

public class AsyncTcpClient : Form
{
   private TextBox newText;
   private TextBox conStatus;
   private ListBox results;
   private Socket client;
   private byte[] data = new byte[1024];
   private int size = 1024;
   public AsyncTcpClient()
   {
      Text = "Asynchronous TCP Client";
      Size = new Size(400, 380);
      
      Label label1 = new Label();
      label1.Parent = this;
      label1.Text = "Enter text string:";
      label1.AutoSize = true;
      label1.Location = new Point(10, 30);
      newText = new TextBox();
      newText.Parent = this;
      newText.Size = new Size(200, 2 * Font.Height);
      newText.Location = new Point(10, 55);
      results = new ListBox();
      results.Parent = this;
      results.Location = new Point(10, 85);
      results.Size = new Size(360, 18 * Font.Height);
      Label label2 = new Label();
      label2.Parent = this;
      label2.Text = "Connection Status:";
      label2.AutoSize = true;
      label2.Location = new Point(10, 330);
      conStatus = new TextBox();
      conStatus.Parent = this;
      conStatus.Text = "Disconnected";
      conStatus.Size = new Size(200, 2 * Font.Height);
      conStatus.Location = new Point(110, 325);
      Button sendit = new Button();
      sendit.Parent = this;
      sendit.Text = "Send";
      sendit.Location = new Point(220,52);
      sendit.Size = new Size(5 * Font.Height, 2 * Font.Height);
      sendit.Click += new EventHandler(ButtonSendOnClick);
      Button connect = new Button();
      connect.Parent = this;
      connect.Text = "Connect";
      connect.Location = new Point(295, 20);
      connect.Size = new Size(6 * Font.Height, 2 * Font.Height);
      connect.Click += new EventHandler(ButtonConnectOnClick);
      Button discon = new Button();
      discon.Parent = this;
      discon.Text = "Disconnect";
      discon.Location = new Point(295,52);
      discon.Size = new Size(6 * Font.Height, 2 * Font.Height);
      discon.Click += new EventHandler(ButtonDisconOnClick);
   }
   void ButtonConnectOnClick(object obj, EventArgs ea)
   {
      conStatus.Text = "Connecting...";
      Socket newsock = new Socket(AddressFamily.InterNetwork,
                            SocketType.Stream, ProtocolType.Tcp);
      IPEndPoint iep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);
      newsock.BeginConnect(iep, new AsyncCallback(Connected), newsock);
   }
   void ButtonSendOnClick(object obj, EventArgs ea)
   {
      byte[] message = Encoding.ASCII.GetBytes(newText.Text);
      newText.Clear();
      client.BeginSend(message, 0, message.Length, SocketFlags.None,
                   new AsyncCallback(SendData), client);
   }
   void ButtonDisconOnClick(object obj, EventArgs ea)
   {
      client.Close();
      conStatus.Text = "Disconnected";
   }
   void Connected(IAsyncResult iar)
   {
      client = (Socket)iar.AsyncState;
      try
      {
         client.EndConnect(iar);
         conStatus.Text = "Connected to: " + client.RemoteEndPoint.ToString();
         client.BeginReceive(data, 0, size, SocketFlags.None,
                       new AsyncCallback(ReceiveData), client);
      } catch (SocketException)
      {
         conStatus.Text = "Error connecting";
      }
   }
   void ReceiveData(IAsyncResult iar)
   {
      Socket remote = (Socket)iar.AsyncState;
      int recv = remote.EndReceive(iar);
      string stringData = Encoding.ASCII.GetString(data, 0, recv);
      results.Items.Add(stringData);
   }
   void SendData(IAsyncResult iar)
   {
      Socket remote = (Socket)iar.AsyncState;
      int sent = remote.EndSend(iar);
      remote.BeginReceive(data, 0, size, SocketFlags.None,
                    new AsyncCallback(ReceiveData), remote);
   }
   public static void Main()
   {
      Application.Run(new AsyncTcpClient());
   }
}


Bad Tcp Client

/*
C# Network Programming 
by Richard Blum
Publisher: Sybex 
ISBN: 0782141765
*/
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class BadTcpClient
{
   public static void Main()
   {
      byte[] data = new byte[1024];
      string stringData;
      IPEndPoint ipep = new IPEndPoint(
                      IPAddress.Parse("127.0.0.1"), 9050);
      Socket server = new Socket(AddressFamily.InterNetwork,
                     SocketType.Stream, ProtocolType.Tcp);
      try
      {
         server.Connect(ipep);
      } catch (SocketException e)
      {
         Console.WriteLine("Unable to connect to server.");
         Console.WriteLine(e.ToString());
         return;
      }

      int recv = server.Receive(data);
      stringData = Encoding.ASCII.GetString(data, 0, recv);
      Console.WriteLine(stringData);
      server.Send(Encoding.ASCII.GetBytes("message 1"));
      server.Send(Encoding.ASCII.GetBytes("message 2"));
      server.Send(Encoding.ASCII.GetBytes("message 3"));
      server.Send(Encoding.ASCII.GetBytes("message 4"));
      server.Send(Encoding.ASCII.GetBytes("message 5"));
      Console.WriteLine("Disconnecting from server...");
      server.Shutdown(SocketShutdown.Both);
      server.Close();
   }
}


Employee Client

/*
C# Network Programming 
by Richard Blum
Publisher: Sybex 
ISBN: 0782141765
*/
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;

public class EmployeeClient
{
   public static void Main()
   {
      Employee emp1 = new Employee();
      Employee emp2 = new Employee();
      TcpClient client;
      emp1.EmployeeID = 1;
      emp1.LastName = "Blum";
      emp1.FirstName = "Katie Jane";
      emp1.YearsService = 12;
      emp1.Salary = 35000.50;
      emp2.EmployeeID = 2;
      emp2.LastName = "Blum";
      emp2.FirstName = "Jessica";
      emp2.YearsService = 9;
      emp2.Salary = 23700.30;
      try
      {
         client = new TcpClient("127.0.0.1", 9050);
      } catch (SocketException)
      {
         Console.WriteLine("Unable to connect to server");
         return;
      }
      NetworkStream ns = client.GetStream();
      byte[] data = emp1.GetBytes();
      int size = emp1.size;
      byte[] packsize = new byte[2];
      Console.WriteLine("packet size = {0}", size);
      packsize = BitConverter.GetBytes(size);
      ns.Write(packsize, 0, 2);
      ns.Write(data, 0, size);
      ns.Flush();
      data = emp2.GetBytes();
      size = emp2.size;
      packsize = new byte[2];
      Console.WriteLine("packet size = {0}", size);
      packsize = BitConverter.GetBytes(size);
      ns.Write(packsize, 0, 2);
      ns.Write(data, 0, size);
      ns.Flush();
   
      ns.Close();
      client.Close();    
   }
}


public class Employee
{
   public int EmployeeID;
   private int LastNameSize;
   public string LastName;
   private int FirstNameSize;
   public string FirstName;
   public int YearsService;
   public double Salary;
   public int size;
   public Employee()
   {
   }
   public Employee(byte[] data)
   {
      int place = 0;
      EmployeeID = BitConverter.ToInt32(data, place);
      place += 4;
      LastNameSize = BitConverter.ToInt32(data, place);
      place += 4;
      LastName = Encoding.ASCII.GetString(data, place, LastNameSize);
      place = place + LastNameSize;
      FirstNameSize = BitConverter.ToInt32(data, place);
      place += 4;
      FirstName = Encoding.ASCII.GetString(data, place, FirstNameSize);
      place += FirstNameSize;
      YearsService = BitConverter.ToInt32(data, place);
      place += 4;
      Salary = BitConverter.ToDouble(data, place);
   }
   public byte[] GetBytes()
   {
      byte[] data = new byte[1024];
      int place = 0;
      Buffer.BlockCopy(BitConverter.GetBytes(EmployeeID), 0, data, place, 4);
      place += 4;
      Buffer.BlockCopy(BitConverter.GetBytes(LastName.Length), 0, data, place, 4);
      place += 4;
      Buffer.BlockCopy(Encoding.ASCII.GetBytes(LastName), 0, data, place, LastName.Length);
      place += LastName.Length;
      Buffer.BlockCopy(BitConverter.GetBytes(FirstName.Length), 0, data, place, 4);
      place += 4;
      Buffer.BlockCopy(Encoding.ASCII.GetBytes(FirstName), 0, data, place, FirstName.Length);
      place += FirstName.Length;
      Buffer.BlockCopy(BitConverter.GetBytes(YearsService), 0, data, place, 4);
      place += 4;
      Buffer.BlockCopy(BitConverter.GetBytes(Salary), 0, data, place, 8);
      place += 8;
      size = place;
      return data;
   }
}


Fixed Tcp Client

/*
C# Network Programming 
by Richard Blum
Publisher: Sybex 
ISBN: 0782141765
*/
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class FixedTcpClient
{
   private static int SendData(Socket s, byte[] data)
   {
      int total = 0;
      int size = data.Length;
      int dataleft = size;
      int sent;
      while (total < size)
      {
         sent = s.Send(data, total, dataleft, SocketFlags.None);
         total += sent;
         dataleft -= sent;
      }
      return total;
   }
   private static byte[] ReceiveData(Socket s, int size)
   {
      int total = 0;
      int dataleft = size;
      byte[] data = new byte[size];
      int recv;
      while(total < size)
      {
         recv = s.Receive(data, total, dataleft, 0);
         if (recv == 0)
         {
            data = Encoding.ASCII.GetBytes("exit ");
            break;
         }
         total += recv;
         dataleft -= recv;
      }
      return data;
   }
   public static void Main()
   {
      byte[] data = new byte[1024];
      int sent;
      IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);
      Socket server = new Socket(AddressFamily.InterNetwork,
                      SocketType.Stream, ProtocolType.Tcp);
      try
      {
         server.Connect(ipep);
      } catch (SocketException e)
      {
         Console.WriteLine("Unable to connect to server.");
         Console.WriteLine(e.ToString());
         return;
      }
      int recv = server.Receive(data);
      string stringData = Encoding.ASCII.GetString(data, 0, recv);
      Console.WriteLine(stringData);
      sent = SendData(server, Encoding.ASCII.GetBytes("message 1"));
      sent = SendData(server, Encoding.ASCII.GetBytes("message 2"));
      sent = SendData(server, Encoding.ASCII.GetBytes("message 3"));
      sent = SendData(server, Encoding.ASCII.GetBytes("message 4"));
      sent = SendData(server, Encoding.ASCII.GetBytes("message 5"));
      Console.WriteLine("Disconnecting from server...");
      server.Shutdown(SocketShutdown.Both);
      server.Close();
   }
}


Network Order Client

/*
C# Network Programming 
by Richard Blum
Publisher: Sybex 
ISBN: 0782141765
*/
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class NetworkOrderClient
{
   public static void Main()
   {
      byte[] data = new byte[1024];
      string stringData;
      TcpClient server;
      try
      {
         server = new TcpClient("127.0.0.1", 9050);
      } catch (SocketException)
      {
         Console.WriteLine("Unable to connect to server");
         return;
      }
      NetworkStream ns = server.GetStream();
      int recv = ns.Read(data, 0, data.Length);
      stringData = Encoding.ASCII.GetString(data, 0, recv);
      Console.WriteLine(stringData);
      short test1 = 45;
      int test2 = 314159;
      long test3 = -123456789033452;
      short test1b = IPAddress.HostToNetworkOrder(test1);
      data = BitConverter.GetBytes(test1b);
      Console.WriteLine("sending test1 = {0}", test1);
      ns.Write(data, 0, data.Length);
      ns.Flush();
      int test2b = IPAddress.HostToNetworkOrder(test2);
      data = BitConverter.GetBytes(test2b);
      Console.WriteLine("sending test2 = {0}", test2);
      ns.Write(data, 0, data.Length);
      ns.Flush();
      long test3b = IPAddress.HostToNetworkOrder(test3);
      data = BitConverter.GetBytes(test3b);
      Console.WriteLine("sending test3 = {0}", test3);
      ns.Write(data, 0, data.Length);
      ns.Flush();
      ns.Close();
      server.Close();
   }
}


Network Stream Tcp Client

/*
C# Network Programming 
by Richard Blum
Publisher: Sybex 
ISBN: 0782141765
*/
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class NetworkStreamTcpClient
{
   public static void Main()
   {
      byte[] data = new byte[1024];
      string input, stringData;
      int recv;
      IPEndPoint ipep = new IPEndPoint(
                      IPAddress.Parse("127.0.0.1"), 9050);
      Socket server = new Socket(AddressFamily.InterNetwork,
                     SocketType.Stream, ProtocolType.Tcp);
      try
      {
         server.Connect(ipep);
      } catch (SocketException e)
      {
         Console.WriteLine("Unable to connect to server.");
         Console.WriteLine(e.ToString());
         return;
      }
      NetworkStream ns = new NetworkStream(server);
      if (ns.CanRead)
      {
         recv = ns.Read(data, 0, data.Length);
         stringData = Encoding.ASCII.GetString(data, 0, recv);
         Console.WriteLine(stringData);
      }
      else
      {
         Console.WriteLine("Error: Can"t read from this socket");
         ns.Close();
         server.Close();
         return;
      }
      while(true)
      {
         input = Console.ReadLine();
         if (input == "exit")
            break;
         if (ns.CanWrite)
         {
            ns.Write(Encoding.ASCII.GetBytes(input), 0, input.Length);
            ns.Flush();
         }
         recv = ns.Read(data, 0, data.Length);
         stringData = Encoding.ASCII.GetString(data, 0, recv);
         Console.WriteLine(stringData);
      }
      Console.WriteLine("Disconnecting from server...");
      ns.Close();
      server.Shutdown(SocketShutdown.Both);
      server.Close();
   }
}


Picky Tcp Client

/*
C# Network Programming 
by Richard Blum
Publisher: Sybex 
ISBN: 0782141765
*/
using System;
using System.Net;
using System.Net.Sockets;
using System.Security;
using System.Security.Permissions;
using System.Text;
[SocketPermission(SecurityAction.Deny, Access="Connect", Host="127.0.0.1",
     Port="All", Transport="All")]
[SocketPermission(SecurityAction.Deny, Access="Connect", Host="192.168.0.2",
     Port="All", Transport="All")]
[SocketPermission(SecurityAction.Deny, Access="Connect", Host="192.168.1.100",
     Port="80", Transport="All")]

public class PickyTcpClient
{
   public static void Main()
   {
      byte[] data = new byte[1024];
      string input, stringData;
      TcpClient server = null;
      Console.Write("Enter a host to connect to: ");
      string stringHost = Console.ReadLine();
 
      try
      {
         server = new TcpClient(stringHost, 9050);
      } catch (SocketException)
      {
         Console.WriteLine("Unable to connect to server");
         return;
      } catch (SecurityException)
      {
         Console.WriteLine(
            "Sorry, you are restricted from connecting to this server");
         return;
      }
      NetworkStream ns = server.GetStream();
      int recv = ns.Read(data, 0, data.Length);
      stringData = Encoding.ASCII.GetString(data, 0, recv);
      Console.WriteLine(stringData);
      while(true)
      {
         input = Console.ReadLine();
         if (input == "exit")
            break;
         ns.Write(Encoding.ASCII.GetBytes(input), 0, input.Length);
         ns.Flush();
         data = new byte[1024];
         recv = ns.Read(data, 0, data.Length);
         stringData = Encoding.ASCII.GetString(data, 0, recv);
         Console.WriteLine(stringData);
      }
      Console.WriteLine("Disconnecting from server...");
      ns.Close();
      server.Close();
   }
}


Select Tcp Client

/*
C# Network Programming 
by Richard Blum
Publisher: Sybex 
ISBN: 0782141765
*/
using System;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class SelectTcpClient
{
   public static void Main()
   {
      Socket sock = new Socket(AddressFamily.InterNetwork,
                        SocketType.Stream, ProtocolType.Tcp);
      IPEndPoint iep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);
      byte[] data = new byte[1024];
      string stringData;
      int recv;
      sock.Connect(iep);
      Console.WriteLine("Connected to server");
      recv = sock.Receive(data);
      stringData = Encoding.ASCII.GetString(data, 0, recv);
      Console.WriteLine("Received: {0}", stringData);

      while(true)
      {
         stringData = Console.ReadLine();
         if (stringData == "exit")
            break;
         data = Encoding.ASCII.GetBytes(stringData);
         sock.Send(data, data.Length, SocketFlags.None);
         data = new byte[1024];
         recv = sock.Receive(data);
         stringData = Encoding.ASCII.GetString(data, 0, recv);
         Console.WriteLine("Received: {0}", stringData);
      }
      sock.Close();
   }
}


Simple Tcp Client

/*
C# Network Programming 
by Richard Blum
Publisher: Sybex 
ISBN: 0782141765
*/
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class SimpleTcpClient
{
   public static void Main()
   {
      byte[] data = new byte[1024];
      string input, stringData;
      IPEndPoint ipep = new IPEndPoint(
                      IPAddress.Parse("127.0.0.1"), 9050);
      Socket server = new Socket(AddressFamily.InterNetwork,
                     SocketType.Stream, ProtocolType.Tcp);
      try
      {
         server.Connect(ipep);
      } catch (SocketException e)
      {
         Console.WriteLine("Unable to connect to server.");
         Console.WriteLine(e.ToString());
         return;
      }

      int recv = server.Receive(data);
      stringData = Encoding.ASCII.GetString(data, 0, recv);
      Console.WriteLine(stringData);
      while(true)
      {
         input = Console.ReadLine();
         if (input == "exit")
            break;
         server.Send(Encoding.ASCII.GetBytes(input));
         data = new byte[1024];
         recv = server.Receive(data);
         stringData = Encoding.ASCII.GetString(data, 0, recv);
         Console.WriteLine(stringData);
      }
      Console.WriteLine("Disconnecting from server...");
      server.Shutdown(SocketShutdown.Both);
      server.Close();
   }
}


Stream Tcp Client

/*
C# Network Programming 
by Richard Blum
Publisher: Sybex 
ISBN: 0782141765
*/
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class StreamTcpClient
{
   public static void Main()
   {
      string data;
      string input;
      IPEndPoint ipep = new IPEndPoint(
                      IPAddress.Parse("127.0.0.1"), 9050);
      Socket server = new Socket(AddressFamily.InterNetwork,
                     SocketType.Stream, ProtocolType.Tcp);
      try
      {
         server.Connect(ipep);
      } catch (SocketException e)
      {
         Console.WriteLine("Unable to connect to server.");
         Console.WriteLine(e.ToString());
         return;
      }

      NetworkStream ns = new NetworkStream(server);
      StreamReader sr = new StreamReader(ns);
      StreamWriter sw = new StreamWriter(ns);
      data = sr.ReadLine();
      Console.WriteLine(data);
      while(true)
      {
         input = Console.ReadLine();
         if (input == "exit")
            break;
         sw.WriteLine(input);
         sw.Flush();
         data = sr.ReadLine();
         Console.WriteLine(data);
      }
      Console.WriteLine("Disconnecting from server...");
      sr.Close();
      sw.Close();
      ns.Close();
      server.Shutdown(SocketShutdown.Both);
      server.Close();
   }
}


Tcp Client Sample

/*
C# Network Programming 
by Richard Blum
Publisher: Sybex 
ISBN: 0782141765
*/
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class TcpClientSample
{
   public static void Main()
   {
      byte[] data = new byte[1024];
      string input, stringData;
      TcpClient server;
 
      try
      {
         server = new TcpClient("127.0.0.1", 9050);
      } catch (SocketException)
      {
         Console.WriteLine("Unable to connect to server");
         return;
      }
      NetworkStream ns = server.GetStream();
      int recv = ns.Read(data, 0, data.Length);
      stringData = Encoding.ASCII.GetString(data, 0, recv);
      Console.WriteLine(stringData);
      while(true)
      {
         input = Console.ReadLine();
         if (input == "exit")
            break;
         ns.Write(Encoding.ASCII.GetBytes(input), 0, input.Length);
         ns.Flush();
         data = new byte[1024];
         recv = ns.Read(data, 0, data.Length);
         stringData = Encoding.ASCII.GetString(data, 0, recv);
         Console.WriteLine(stringData);
      }
      Console.WriteLine("Disconnecting from server...");
      ns.Close();
      server.Close();
   }
}


Uses a TcpClient to handle HTTP

using System;
using System.Text;
using System.IO;
using System.Net.Sockets;

public class TryTcp {
  public static void Main(String [] args) {
    TcpClient client = new TcpClient("www.nfex.ru", 80);
    NetworkStream stream = client.GetStream();
    byte[] send = Encoding.ASCII.GetBytes("GET HTTP/1.0 \r\n\r\n");
    stream.Write(send, 0, send.Length);
    byte[] bytes = new byte[client.ReceiveBufferSize];
    int count = stream.Read(bytes, 0, (int)client.ReceiveBufferSize);
    String data = Encoding.ASCII.GetString(bytes);
    char[] unused = {(char)data[count]};
    Console.WriteLine(data.TrimEnd(unused));
    stream.Close();
    client.Close();
  }
}


Var Tcp Client

/*
C# Network Programming 
by Richard Blum
Publisher: Sybex 
ISBN: 0782141765
*/
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class VarTcpClient
{
   private static int SendVarData(Socket s, byte[] data)
   {
      int total = 0;
      int size = data.Length;
      int dataleft = size;
      int sent;
      byte[] datasize = new byte[4];
      datasize = BitConverter.GetBytes(size);
      sent = s.Send(datasize);
      while (total < size)
      {
         sent = s.Send(data, total, dataleft, SocketFlags.None);
         total += sent;
         dataleft -= sent;
      }
      return total;
   }
   private static byte[] ReceiveVarData(Socket s)
   {
      int total = 0;
      int recv;
      byte[] datasize = new byte[4];
      recv = s.Receive(datasize, 0, 4, 0);
      int size = BitConverter.ToInt32(datasize, 0);
      int dataleft = size;
      byte[] data = new byte[size];
      while(total < size)
      {
         recv = s.Receive(data, total, dataleft, 0);
         if (recv == 0)
         {
            data = Encoding.ASCII.GetBytes("exit ");
            break;
         }
         total += recv;
         dataleft -= recv;
      }
      return data;
   }
   public static void Main()
   {
      byte[] data = new byte[1024];
      int sent;
      IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);
      Socket server = new Socket(AddressFamily.InterNetwork,
                      SocketType.Stream, ProtocolType.Tcp);
      try
      {
         server.Connect(ipep);
      } catch (SocketException e)
      {
         Console.WriteLine("Unable to connect to server.");
         Console.WriteLine(e.ToString());
         return;
      }
      data = ReceiveVarData(server);
      string stringData = Encoding.ASCII.GetString(data);
      Console.WriteLine(stringData);
      string message1 = "This is the first test";
      string message2 = "A short test";
      string message3 = "This string is an even longer test. The quick brown fox jumps over the lazy dog.";
      string message4 = "a";
      string message5 = "The last test";
      sent = SendVarData(server, Encoding.ASCII.GetBytes(message1));
      sent = SendVarData(server, Encoding.ASCII.GetBytes(message2));
      sent = SendVarData(server, Encoding.ASCII.GetBytes(message3));
      sent = SendVarData(server, Encoding.ASCII.GetBytes(message4));
      sent = SendVarData(server, Encoding.ASCII.GetBytes(message5));
      Console.WriteLine("Disconnecting from server...");
      server.Shutdown(SocketShutdown.Both);
      server.Close();
   }
}