manzoor10
January 23rd, 2009, 10:46 AM
I'm getting a few errors while creating a new thread, I don't know what am I doing wrong but somethings not working properly in the Thread creation in the above code.
// ThreadedServer.cpp : main project file.
#include "stdafx.h"
using namespace System;
using namespace System::Net;
using namespace System::Net::Sockets;
using namespace System::IO;
using namespace System::Threading;
using namespace System::Collections;
using namespace System::Text;
ref class ClientHandler
{
public:
TcpClient^ clientSocket;
void RunClient()
{
// Create the stream classes
StreamReader^ readerStream = gcnew StreamReader(clientSocket->GetStream());
NetworkStream^ writerStream = clientSocket->GetStream();
String^ returnData = readerStream->ReadLine();
String^ userName = returnData;
Console::WriteLine("Welcome " + userName + " to the Server");
while (true)
{
returnData = readerStream->ReadLine();
if (returnData->IndexOf("QUIT") > -1)
{
Console::WriteLine("Bye Bye " + userName);
break;
}
Console::WriteLine(userName + ": " + returnData);
returnData += "\r\n";
array<byte>^ dataWrite = Encoding::ASCII->GetBytes(returnData);
writerStream->Write(dataWrite, 0, dataWrite->Length);
}
clientSocket->Close();
}
};
const int ECHO_PORT = 8080;
void main(void)
{
try
{
// Bind the server to the local port
TcpListener^ clientListener = gcnew TcpListener(ECHO_PORT);
// Start to listen
clientListener->Start();
Console::WriteLine("Waiting for connections...");
while (true)
{
// Accept the connection
TcpClient^ client = clientListener->AcceptTcpClient();
ClientHandler^ cHandler = gcnew ClientHandler();
cHandler->clientSocket = client;
// Create a new thread for the client
// is anything wrong here?
Thread^ clientThread = gcnew Thread(gcnew ThreadStart(cHandler, &cHandler::RunClient));
clientThread->Start();
}
clientListener->Stop();
}
catch (Exception^ e)
{
Console::WriteLine("Exception: " + e);
}
}</byte>
Here are the errors I'm getting
1>.\ThreadedServer.cpp(57) : warning C4947: 'System::Net::Sockets::TcpListener::TcpListener' : marked as obsolete
1> Message: 'This method has been deprecated. Please use TcpListener(IPAddress localaddr, int port) instead.
1>.\ThreadedServer.cpp(74) : error C2825: 'cHandler': must be a class or namespace when followed by '::'
1>.\ThreadedServer.cpp(74) : error C2039: 'RunClient' : is not a member of '`global namespace''
1>.\ThreadedServer.cpp(74) : error C2146: syntax error : missing ')' before identifier 'RunClient'
1>.\ThreadedServer.cpp(74) : error C3924: error in argument #2 of delegate
constructor call 'System::Threading::ThreadStart':
1> pointer to member function expected
1>.\ThreadedServer.cpp(74) : error C2146: syntax error : missing ')' before identifier 'RunClient'
1>.\ThreadedServer.cpp(74) : error C2146: syntax error : missing ';' before identifier 'RunClient'
1>.\ThreadedServer.cpp(74) : error C2059: syntax error : ')'
1>.\ThreadedServer.cpp(74) : error C2059: syntax error : ')'
1>.\ThreadedServer.cpp(74) : error C2065: 'RunClient' : undeclared identifier
Any hints will be really appreciated :)
// ThreadedServer.cpp : main project file.
#include "stdafx.h"
using namespace System;
using namespace System::Net;
using namespace System::Net::Sockets;
using namespace System::IO;
using namespace System::Threading;
using namespace System::Collections;
using namespace System::Text;
ref class ClientHandler
{
public:
TcpClient^ clientSocket;
void RunClient()
{
// Create the stream classes
StreamReader^ readerStream = gcnew StreamReader(clientSocket->GetStream());
NetworkStream^ writerStream = clientSocket->GetStream();
String^ returnData = readerStream->ReadLine();
String^ userName = returnData;
Console::WriteLine("Welcome " + userName + " to the Server");
while (true)
{
returnData = readerStream->ReadLine();
if (returnData->IndexOf("QUIT") > -1)
{
Console::WriteLine("Bye Bye " + userName);
break;
}
Console::WriteLine(userName + ": " + returnData);
returnData += "\r\n";
array<byte>^ dataWrite = Encoding::ASCII->GetBytes(returnData);
writerStream->Write(dataWrite, 0, dataWrite->Length);
}
clientSocket->Close();
}
};
const int ECHO_PORT = 8080;
void main(void)
{
try
{
// Bind the server to the local port
TcpListener^ clientListener = gcnew TcpListener(ECHO_PORT);
// Start to listen
clientListener->Start();
Console::WriteLine("Waiting for connections...");
while (true)
{
// Accept the connection
TcpClient^ client = clientListener->AcceptTcpClient();
ClientHandler^ cHandler = gcnew ClientHandler();
cHandler->clientSocket = client;
// Create a new thread for the client
// is anything wrong here?
Thread^ clientThread = gcnew Thread(gcnew ThreadStart(cHandler, &cHandler::RunClient));
clientThread->Start();
}
clientListener->Stop();
}
catch (Exception^ e)
{
Console::WriteLine("Exception: " + e);
}
}</byte>
Here are the errors I'm getting
1>.\ThreadedServer.cpp(57) : warning C4947: 'System::Net::Sockets::TcpListener::TcpListener' : marked as obsolete
1> Message: 'This method has been deprecated. Please use TcpListener(IPAddress localaddr, int port) instead.
1>.\ThreadedServer.cpp(74) : error C2825: 'cHandler': must be a class or namespace when followed by '::'
1>.\ThreadedServer.cpp(74) : error C2039: 'RunClient' : is not a member of '`global namespace''
1>.\ThreadedServer.cpp(74) : error C2146: syntax error : missing ')' before identifier 'RunClient'
1>.\ThreadedServer.cpp(74) : error C3924: error in argument #2 of delegate
constructor call 'System::Threading::ThreadStart':
1> pointer to member function expected
1>.\ThreadedServer.cpp(74) : error C2146: syntax error : missing ')' before identifier 'RunClient'
1>.\ThreadedServer.cpp(74) : error C2146: syntax error : missing ';' before identifier 'RunClient'
1>.\ThreadedServer.cpp(74) : error C2059: syntax error : ')'
1>.\ThreadedServer.cpp(74) : error C2059: syntax error : ')'
1>.\ThreadedServer.cpp(74) : error C2065: 'RunClient' : undeclared identifier
Any hints will be really appreciated :)