d2jsp
Log InRegister
d2jsp Forums > Off-Topic > Computers & IT > Programming & Development > Tftp In C#
Add Reply New Topic New Poll
Member
Posts: 27,086
Joined: Mar 7 2008
Gold: 685.00
Mar 26 2014 03:27pm
everything seems to work fine but cant receive data from a read request

here is my code:

Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;
using System.IO;

namespace TFTP_Server
{
class CRRQ
{
EndPoint m_PointDistantRRQ;
string m_strFichierRRQ;

public void SetPointDistant(EndPoint PointDistant)
{
m_PointDistantRRQ = PointDistant;
}

public void SetFichier(string NomFichier)
{
m_strFichierRRQ = NomFichier;
}

public void MonThreadRRQ()
{
Socket socket;
EndPoint PointLocal = new IPEndPoint(0,0);
FileStream m_fs;
int nTimeout = 0;
int NbNack =0;
bool bRead;
int nOctetsLu;
int NBloc = 0;

m_fs = File.Open(m_strFichierRRQ, FileMode.Open, FileAccess.Read, FileShare.Read);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.Bind(PointLocal);

do
{
byte[] bTrame = new byte[516];
nOctetsLu = m_fs.Read(bTrame, 4, 512);
NBloc++;
byte[] bNBock = new byte[] { (byte)(NBloc >> 8), (byte)(NBloc & 0xFF) }; ;
bTrame[0] = 0;
bTrame[1] = 3;
bTrame[2] = bNBock[0];
bTrame[3] = bNBock[1];
do
{
socket.SendTo(bTrame, bTrame.Length, SocketFlags.None, m_PointDistantRRQ);
bRead = socket.Poll(5000000, SelectMode.SelectRead);
if (!bRead)
nTimeout++;
else
{
socket.ReceiveFrom(bTrame, ref m_PointDistantRRQ);
if (bTrame[2] != 0 && bTrame[3] != 4)
NbNack++;
else
NBloc = (int)bTrame[2] << 8 + bTrame[3];
}
}
while (bRead == false && nTimeout < 10 && NbNack < 3);
}
while (nOctetsLu == 512 && nTimeout < 10 && NbNack < 3);
m_fs.Close();
socket.Close();
}
}
}
Go Back To Programming & Development Topic List
Add Reply New Topic New Poll