Visual C++ .NET/Network/TcpServer
TcpServer Demo
<source lang="csharp">
- include "stdafx.h"
using namespace System; using namespace System::Net; using namespace System::Net::Sockets; using namespace System::Threading; using namespace System::Text; ref class TcpServer { public:
void ProcessThread(Object ^clientObj);
}; void TcpServer::ProcessThread(Object ^clientObj) {
Socket^ client = (Socket^)clientObj; IPEndPoint^ clientEP = (IPEndPoint^)client->RemoteEndPoint; Console::WriteLine("Connected on IP: {0} Port: {1}", clientEP->Address, clientEP->Port); array<unsigned char>^ msg = Encoding::ASCII->GetBytes("connected"); client->Send(msg); int rcv; while (true) { msg = gcnew array<unsigned char>(1024); if ((rcv = client->Receive(msg)) == 0) break; Console::WriteLine("Port[{0}] {1}", clientEP->Port, Encoding::ASCII->GetString(msg, 0, rcv)); client->Send(msg, rcv, SocketFlags::None); } client->Close(); Console::WriteLine("Connection to IP: {0} Port {1} closed.", clientEP->Address, clientEP->Port);
} void main() {
TcpServer^ server = gcnew TcpServer(); Socket^ tcpListener = gcnew Socket(AddressFamily::InterNetwork, SocketType::Stream, ProtocolType::Tcp); IPEndPoint^ iped = gcnew IPEndPoint(IPAddress::Any, 12345); tcpListener->Bind(iped); tcpListener->Listen((int)SocketOptionName::MaxConnections); while(true) { Console::WriteLine("Waiting for client connection."); Socket^ client = tcpListener->Accept(); Thread ^thr = gcnew Thread( gcnew ParameterizedThreadStart(server, &TcpServer::ProcessThread)); thr->Start(client); }
}
</source>
TcpServer Listener
<source lang="csharp">
- include "stdafx.h"
using namespace System; using namespace System::Net; using namespace System::Net::Sockets; using namespace System::Threading; using namespace System::Text; ref class TcpServer { public:
void ProcessThread(Object ^clientObj);
}; void TcpServer::ProcessThread(Object ^clientObj) {
Socket^ client = (Socket^)clientObj; IPEndPoint^ clientEP = (IPEndPoint^)client->RemoteEndPoint; Console::WriteLine(clientEP->Address); Console::WriteLine(clientEP->Port); array<unsigned char>^ msg = Encoding::ASCII->GetBytes("Success "); client->Send(msg); int rcv; while (true) { msg = gcnew array<unsigned char>(1024); if ((rcv = client->Receive(msg)) == 0) break; Console::WriteLine(clientEP->Port); Console::WriteLine(Encoding::ASCII->GetString(msg, 0, rcv)); client->Send(msg, rcv, SocketFlags::None); } client->Close(); Console::WriteLine(clientEP->Address); Console::WriteLine(clientEP->Port);
} void main() {
TcpServer^ server = gcnew TcpServer(); TcpListener^ socket = gcnew TcpListener(IPAddress::Any, 12345); socket->Start(); while(true) { Console::WriteLine("Waiting for client connection."); Socket^ client = socket->AcceptSocket(); Thread ^thr = gcnew Thread( gcnew ParameterizedThreadStart(server, &TcpServer::ProcessThread)); thr->Start(client); }
}
</source>
Tcp Server Stream
<source lang="csharp">
- include "stdafx.h"
using namespace System; using namespace System::IO; using namespace System::Net; using namespace System::Net::Sockets; using namespace System::Threading; ref class TcpServer { public:
void ProcessThread(Object ^clientObj);
}; void TcpServer::ProcessThread(Object ^clientObj) {
TcpClient^ client = (TcpClient^)clientObj; IPEndPoint^ clientEP = (IPEndPoint^)client->Client->RemoteEndPoint; Console::WriteLine("Connected on IP: {0} Port: {1}", clientEP->Address, clientEP->Port); StreamWriter^ writer = gcnew StreamWriter(client->GetStream()); StreamReader^ reader = gcnew StreamReader(client->GetStream());
writer->WriteLine(clientEP->Port); writer->Flush(); String^ msg = "asdf"; Console::WriteLine("Port[{0}] {1}", clientEP->Port, msg); writer->WriteLine(msg); writer->Flush(); client->Close(); Console::WriteLine("Connection to IP: {0} Port {1} closed.", clientEP->Address, clientEP->Port);
} void main() {
TcpServer^ server = gcnew TcpServer(); TcpListener^ socket = gcnew TcpListener(IPAddress::Any, 12345); socket->Start(); while(true) { Console::WriteLine("Waiting for client connection."); TcpClient^ client = socket->AcceptTcpClient(); Thread ^thr = gcnew Thread(gcnew ParameterizedThreadStart(server, &TcpServer::ProcessThread)); thr->Start(client); }
}
</source>