Tải bản đầy đủ - 0 (trang)
CHƯƠNG II: CƠ SỞ LÝ THUYẾT

CHƯƠNG II: CƠ SỞ LÝ THUYẾT

Tải bản đầy đủ - 0trang

 RDT2.1 bên nhận xử lí lỗi ACK/NAK



Trang 6 / 16



2.3. Hiện thực code bang c#



 Rdt rerver:

namespace RDT_Server

{

public partial class Form1 : Form

{

private segment[] segments = new segment[10];//mảng 10 phần tử cho segment

private int index = -1; //Index

public Form1()

{

InitializeComponent();

}

private void Serve()

{

try

{

int recv;//Number

int packet_number;//Packet Number

bool work = true;//Biến Boolean cho vòng lặp while

IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080);

Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream,

ProtocolType.Tcp);

newsock.Bind(ipep);

newsock.Listen(10);



Trang 7 / 16



byte[] data;

foreach (Control var in this.Controls)//Check Controls trong Form

{

for (int i = 1; i < 11; i++)

{

if (var is Label && (var.Name == "label" + i.ToString()))

{

var.BackColor = Color.Silver;

}

}

}

while (work)

{

Socket client = newsock.Accept();

data = new byte[4];

recv = client.Receive(data);

byte[] packet_tag = new byte[3];

packet_tag[0] = data[1];

packet_tag[1] = data[2];

packet_tag[2] = data[3];

packet_number = Convert.ToInt16(Encoding.ASCII.GetString(packet_tag, 0, 2));

int corrupted = Convert.ToInt16(Encoding.ASCII.GetString(packet_tag, 2, 1));

index = packet_number;

if (packet_number >= 15)

{

work = false;

}

segments[packet_number - 1].data[0] = data[0];



if (corrupted == 0)//0 :không lỗi 1:lỗi

{

segments[packet_number - 1].reached_dest = true;//nhận segment

segments[packet_number - 1].packet_pos = packet_number;

//không lỗi :gửi ACK

data = new byte[3];

data = Encoding.ASCII.GetBytes("ACK");

client.Send(data, data.Length, SocketFlags.None);

foreach (Control var in this.Controls)//Checks tất cả controls trong Form

{

if (var is Label && (var.Name == "label" + segments[packet_number 1].packet_pos.ToString()))



Trang 8 / 16



{

}



var.BackColor = Color.RoyalBlue;



}

}

else

{

segments[packet_number - 1].reached_dest = false;

segments[packet_number - 1].packet_pos = packet_number;

data = new byte[4];

data = Encoding.ASCII.GetBytes("NACK");

client.Send(data, data.Length, SocketFlags.None);

foreach (Control var in this.Controls)//Checks tất cả controls trong Form

{

if (var is Label && (var.Name == "label" + segments[packet_number 1].packet_pos.ToString()))

{

var.BackColor = Color.Crimson;

}

}

}

client.Close();

}



}

catch (Exception ex)

{

MessageBox.Show(ex.Message,"Exception",MessageBoxButtons.OK,MessageBoxIcon.Error);//Exceptio

n Message is shown

}

}

private void btnServe_Click(object sender, EventArgs e)

{

Thread ta = new Thread(new ThreadStart(Serve));

ta.Start();

lblSrvState.Text = "Server ĐANG hoạt động!";

}

private void btnDownload_Click(object sender, EventArgs e)

{

try

{

bool DownloadEnable = false;

for (int i = 0; i < 10; i++)

{

if (segments[i].reached_dest == false)//Check segments

{

DownloadEnable = false;

break;

}

else

{



Trang 9 / 16



DownloadEnable = true;

}



}



if (index >= 10 && DownloadEnable)

{

SaveFileDialog sfd = new SaveFileDialog();

sfd.Title = "Select a text file";

sfd.Filter = "Text Files (*.txt)|*.txt";

if (sfd.ShowDialog(this) == DialogResult.OK)//check đã ghi tên file chưa

{

FileStream fs = new FileStream(sfd.FileName, FileMode.Create);

StreamWriter swtr = new StreamWriter(fs, Encoding.GetEncoding("ISO-88599"));//Stream Writer sử dụng Turkish Encoding

byte[] receivedData = new byte[10];

for (int i = 0; i < 10; i++)

{

receivedData[i] = segments[i].data[0];

}

string words = Encoding.ASCII.GetString(receivedData, 0, 10);

swtr.WriteLine(words);

swtr.Flush();

fs.Close();

Process process = new Process();

process.StartInfo.FileName = sfd.FileName;

process.StartInfo.Verb = "Open";

process.StartInfo.CreateNoWindow = true;

process.Start();



}

}

else

{

MessageBox.Show("No File Received or File is Corrupted!...", "Failure");

}



}

catch (Exception ex)

{

MessageBox.Show(ex.Message, "Exception", MessageBoxButtons.OK,

MessageBoxIcon.Error);

}

}

private void Form1_Load(object sender, EventArgs e)

{



for (int i = 0; i < 10; i++)

{

segments[i] = new segment();

segments[i].data = new byte[1];

}

foreach (Control var in this.Controls)

{

if (var is Label && var.Name.StartsWith("label"))

{

var.Text = var.Text.Replace("label", "Segment#");



Trang 10 / 16



}

}

ToolTip tipServe = new ToolTip();

tipServe.IsBalloon = true;

tipServe.ToolTipTitle = "RDT Simulation";

tipServe.ToolTipIcon = ToolTipIcon.Info;

tipServe.SetToolTip(btnServe, "Click to Start Simulation");

ToolTip tipDownload = new ToolTip();

tipDownload.IsBalloon = true;

tipDownload.ToolTipTitle = "RDT Simulation";

tipDownload.ToolTipIcon = ToolTipIcon.Info;



Random random = new Random();

}

private void numProbability_ValueChanged(object sender, EventArgs e)

{

Random random = new Random();

}



}

class segment

{

private byte[] Data;

public byte[] data

{

get { return Data; }

set { Data = value; }

}

private bool Reached_dest;

public bool reached_dest

{

get { return Reached_dest; }

set { Reached_dest = value; }

}

private int Packet_pos;

public int packet_pos

{

get { return Packet_pos; }

set { Packet_pos = value; }

}

public segment()

{

packet_pos = 0;

data = new byte[1];

}



Trang 11 / 16



}

class Probability

{

private int index;

private bool used;

public Probability()

{

used = false;

index = -1;

}

public bool Used

{

get { return used; }

set { used = value; }

}

public int Index

{

get { return index; }

set { index = value; }

}

}



}



 Rdt client:

Hàm tải file lên:

private void btnFileUpload_Click(object sender, EventArgs e)

{

index = 0;

for (int i = 0; i < 10; i++)

{

segments[i] = new segment();

segments[i].data = new byte[1];

}

OpenFileDialog ofd = new OpenFileDialog();

ofd.Title = "Select a text file to Send";

ofd.Filter = "Text Files (*.txt)|*.txt";

if (ofd.ShowDialog(this) == DialogResult.OK)

{

FileStream fs = new FileStream(ofd.FileName, FileMode.Open);

file = ReadFully(fs, 10);

for (int i = 0; i < 10; i++)

{

segments[i].data[0] = file[i];

}

btnConnect.Enabled = true;

foreach (Control var in this.Controls)

{

if (var is Label && var.Name.StartsWith("label"))

{

var.BackColor = Color.PaleGreen;

}

}



Trang 12 / 16



fs.Close();

}



}



Hàm gửi file:

private void btnConnect_Click(object sender, EventArgs e)

{

bool firstSend = true;

if (index > 0 && index <= 10)

{

if (index == 1)

{

for (int i = 0; i < index; i++)

{

if (segments[i].packet_ack == false)

{

for (int j = 0; j < index; j++)

{

SendSegments(j + 1);//gửi lại Segments

}

firstSend = false;

break;

}

}

}

else

{

for (int i = index - 1; i < index; i++)

{

if (segments[i].packet_ack == false)

{

for (int j = index - 1; j < index; j++)

{

SendSegments(j + 1);//gửi Segments

}

firstSend = false;

break;

}

}

}

if (firstSend)

{

Thread[] threads = new Thread[1];

threads[0] = new Thread(new ThreadStart(SendSegment));

threads[0].Start();

Thread.Sleep(0);

}

}

if (index == 0 && firstSend)

{

Thread[] threads = new Thread[1];

threads[0] = new Thread(new ThreadStart(SendSegment));

threads[0].Start();

Thread.Sleep(0);



Trang 13 / 16



}

}



Trang 14 / 16



CHƯƠNG III: KẾT LUẬN

 Kết quả đạt được:

Đồ án hoàn thành giúp người đọc có cái nhìn khái qt hơn về q trình

truyền dữ liệu trên mạng và hiểu rõ quá trình truyền tin tin cậy như thế nào.



 Kết luận:

Với RDT2.1 có thể giúp người lập trình lập trình những ứng dụng mạng có

thể truyền tin tin cậy và đảm bảo hiệu quả.



TÀI LIỆU THAM KHẢO

1. Slide môn nhập môn mạng máy tinh (uit)_chương 3

Trang 15 / 16



2.

3.



http://data.tailieuhoctap.vn/books/cong-nghe-thong-tin/quan-trimang/file_goc_775131.pdf

https://www.youtube.com/watch?v=9z-BSRnxjHU



Trang 16 / 16



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

CHƯƠNG II: CƠ SỞ LÝ THUYẾT

Tải bản đầy đủ ngay(0 tr)

×