Hi
here is the scenario :
1- I read contents of a text file from a flash memory plugged into the usb host module
2- I want to send the read text file contents using TCP to a windows forms application which is a TCP Listener
here is the code to send TCP running on FEZ device :
public bool SendFile()
{
bool returnValue = false;
try
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ServerIP = new IPAddress(new byte[] { 172, 16, 43, 193 });
IPEndPoint ServerEndPoint = new IPEndPoint(ServerIP, 12241);
byte[] buf = Encoding.UTF8.GetBytes(FileContentText);
socket.Connect(ServerEndPoint);
socket.Send(buf);
if (socket.Poll(5 * 1000000, SelectMode.SelectRead)) // wait for data from the server
{
byte[] inbuf = new byte[socket.Available];
socket.Receive(inbuf);
//string m = new string(Encoding.UTF8.GetChars(inbuf));
}
socket.Close();
}
catch (Exception ex)
{
string s = ex.Message;
if (ex.InnerException != null)
s = s + ex.InnerException.Message;
if (ex.StackTrace != null)
s = s + ex.StackTrace;
}
return returnValue;
}
and here is the code on my windows forms application :
private void Form1_Load(object sender, EventArgs e)
{
try
{
System.Threading.Thread t = new Thread(new ThreadStart(SendTCPMessage));
txtStatus.Text = txtStatus.Text + "TCP listening established successfully\r\n";
}
catch (Exception ex)
{
txtStatus.Text = txtStatus.Text + "An error occured while trying to establish TCP listening : \r\n" + ex.Message + "\r\n";
if (ex.InnerException != null)
txtStatus.Text = txtStatus.Text + ex.InnerException + "\r\n";
}
}
private static void SendTCPMessage()
{
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, c_port);
server.Bind(localEndPoint);
server.Listen(1);
while (true)
{
// Wait for a client to connect.
Socket clientSocket = server.Accept();
// Process the client request. true means asynchronous.
new ProcessClientRequest(clientSocket, true);
}
}
The issue is that on the FEZ device at the following line of code :
socket.Connect(ServerEndPoint);
the application throws the following exception :
ex.Message :
Exception was thrown:
System.Net.Sockets.SocketException
ex.StackTrace :
Exception was thrown:
System.Net.Sockets.SocketExceptionMicrosoft.SPOT.Net.SocketNative::connect
System.Net.Sockets.Socket::Connect
USBHostExample.Program::SendFile
USBHostExample.Program::button_ButtonReleased
Gadgeteer.Modules.GHIElectronics.Button::OnButtonEvent
Gadgeteer.Modules.GHIElectronics.Button::_input_Interrupt
System.Reflection.MethodBase::Invoke
Gadgeteer.Program::DoOperation
Microsoft.SPOT.Dispatcher::PushFrameImpl
Microsoft.SPOT.Dispatcher::PushFrame
Microsoft.SPOT.Dispatcher::Run
Gadgeteer.Program::Run
Any helps would be appreciated
and here is the code for in my win form app :
internal sealed class ProcessClientRequest
{
private Socket m_clientSocket;
/// <summary>
/// The constructor calls another method to handle the request, but can
/// optionally do so in a new thread.
/// </summary>
/// /// <param name="clientSocket"></param>
/// <param name="asynchronously"></param>
public ProcessClientRequest(Socket clientSocket, Boolean asynchronously)
{
m_clientSocket = clientSocket;
if (asynchronously)
// Spawn a new thread to handle the request.
new Thread(ProcessRequest).Start();
else ProcessRequest();
}
/// <summary>
/// Processes the request.
/// </summary>
private void ProcessRequest()
{
const Int32 c_microsecondsPerSecond = 1000000;
// 'using' ensures that the client's socket gets closed.
using (m_clientSocket)
{
// Wait for the client request to start to arrive.
Byte[] buffer = new Byte[1024];
if (m_clientSocket.Poll(5 * c_microsecondsPerSecond,
SelectMode.SelectRead))
{
// If 0 bytes in buffer, then the connection has been closed,
// reset, or terminated.
if (m_clientSocket.Available == 0)
return;
// Read the first chunk of the request (we don't actually do
// anything with it).
Int32 bytesRead = m_clientSocket.Receive(buffer,
m_clientSocket.Available, SocketFlags.None);
String result = "";
string FileContent = new string(Encoding.UTF8.GetChars(buffer));
MessageBox.Show("Text file with following content received :\r\n" + FileContent);
if (SaveFile(FileContent))
{
result = "1";
}
else
{
result = "0";
}
// Return a static string to the client.
byte[] buf = Encoding.UTF8.GetBytes(result);
int offset = 0;
int ret = 0;
int len = buf.Length;
while (len > 0)
{
ret = m_clientSocket.Send(buf, offset, len, SocketFlags.None);
len -= ret;
offset += ret;
}
m_clientSocket.Close();
}
}
}
private bool SaveFile(string FileContent)
{
bool returnValue = false;
try
{
string RootSaveDirectory = ConfigurationManager.AppSettings["FileSaveRootDirectory"].ToString();
string SaveDirectoryName = DateTime.Now.Year.ToString() + "." + DateTime.Now.Month.ToString() + "." + DateTime.Now.Day.ToString() + " " + DateTime.Now.Hour.ToString() + "." + DateTime.Now.Minute.ToString() + "." + DateTime.Now.Second.ToString() + "." + DateTime.Now.Millisecond.ToString();
string SaveDirectory = Path.Combine(RootSaveDirectory, SaveDirectoryName);
if (!Directory.Exists(SaveDirectory))
{
Directory.CreateDirectory(SaveDirectory);
}
string FileName = ConfigurationManager.AppSettings["FileName"].ToString();
File.WriteAllText(Path.Combine(SaveDirectory, FileName), FileContent);
returnValue = true;
}
catch { }
return returnValue;
}
}