TCP Socket: Data Transfer without Single Byte loss using C#
This clip shows how to transfer data over TCP socket without single byte loss using C#. Code contains two user defined function, that create packet and read packet;
Enjoy!!!
don’t forget to subscribe on youtube as more code comming.
Watch Video and Configure the code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Net.Sockets;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TCPDataTransfer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void bt_start_server_Click(object sender, EventArgs e)
{
TCPServer obj_server = new TCPServer();
System.Threading.Thread obj_thread = new System.Threading.Thread(obj_server.StartServer);
obj_thread.Start();
}
private void bt_send_Click(object sender, EventArgs e)
{
TcpClient tc = new TcpClient("127.0.0.1", 6868);
NetworkStream ns = tc.GetStream();
byte[] data_tosend=CreateDataPacket(Encoding.UTF8.GetBytes(tx_data_send.Text));
ns.Write(data_tosend, 0, data_tosend.Length);
}
private byte[] CreateDataPacket(byte[] data)
{
byte[] initialize = new byte[1];
initialize[0] = 2;
byte[] separator = new byte[1];
separator[0] = 4;
byte[] datalength = Encoding.UTF8.GetBytes(Convert.ToString(data.Length));
MemoryStream ms = new MemoryStream();
ms.Write(initialize, 0, initialize.Length);
ms.Write(datalength, 0, datalength.Length);
ms.Write(separator, 0, separator.Length);
ms.Write(data, 0, data.Length);
return ms.ToArray();
}
}
class TCPServer
{
TcpListener obj_server;
public TCPServer()
{
obj_server = new TcpListener(IPAddress.Any, 6868);
}
public void StartServer()
{
obj_server.Start();
while (true)
{
TcpClient tc = obj_server.AcceptTcpClient();
NetworkStream ns = tc.GetStream();
if (ns.ReadByte() == 2)
{
byte[] recv_data = ReadStream(ns);
Form1.ActiveForm.Invoke(new MethodInvoker(delegate
{
((TextBox)Form1.ActiveForm.Controls.Find("tx_recv_data", true)[0]).Text = Encoding.UTF8.GetString(recv_data);
}));
}
}
}
public byte[] ReadStream(NetworkStream ns)
{
byte[] data_buff = null;
int b = 0;
String buff_length = "";
while ((b = ns.ReadByte()) != 4)
{
buff_length += (char)b;
}
int data_length = Convert.ToInt32(buff_length);
data_buff = new byte[data_length];
int byte_read = 0;
int byte_offset = 0;
while (byte_offset < data_length)
{
byte_read = ns.Read(data_buff, byte_offset, data_length - byte_offset);
byte_offset += byte_read;
}
return data_buff;
}
}
}