我是使用C#的Windows套接字编程的新手,我想创建一个在一个服务器的多个客户端下运行的应用程序。服务器将等待来自客户端的传入连接,并为每个连接分配新端口。 服务器应接受来自多个客户端的文件传输。传输文件大约为10-20 MB。
我经历了许多教程和示例,但他们确实以一对一的方式进行转换。我能够将多个客户端连接到一个服务器并通过它发送文本。服务器正在接受客户端连接及其发送的文本消息,但我不知道以相同的模式传输文件。
如果有任何教程,示例或指南可以帮助我理解从多个客户端到单个服务器的文件传输,那将是一个很好的帮助。
答案 0 :(得分:-1)
编辑18-6-2014 这是我的网络类的一个c ++示例,它并不完美,但你会明白这一点 m_clientList是一个向量,我保存连接,但我不知道c#是否有一个向量,但像list这样的东西将起作用
DWORD WINAPI Network::ServerAcceptConnections(LPVOID lpParam)
{
Network* pNetwork = (Network*) lpParam;
SOCKET new_socket;
char *message;
int c = sizeof(struct sockaddr_in);
DWORD dwWaitResult;
Sleep(100);
while (true)
{
new_socket = accept(pNetwork->m_s , (struct sockaddr *)&pNetwork->m_client, &c);
if (new_socket != INVALID_SOCKET )
{
dwWaitResult = WaitForSingleObject(
pNetwork->m_ClientListMutex, // handle to mutex
INFINITE); // no time-out interval
if (dwWaitResult == WAIT_OBJECT_0)
{
__try
{
//Reply to the client
if (pNetwork->m_clientList.size() < pNetwork->m_maxConnections)
{
if(pNetwork->m_debugModus) printf("DEBUG MODUS: Connection accepted\r\n");
pNetwork->m_clientList.push_back(new_socket);
message = NETWORK_CLASS_CONNECTION_SUCCES;
Message out;
out.client = new_socket;
out.message = message;
out.size = strlen(message);
pNetwork->SendData(out);
}
else
{
if(pNetwork->m_debugModus) printf("DEBUG MODUS: Max connections reached\r\n");
message = NETWORK_CLASS_MAX_CONNECTIONS;
pNetwork->Send(new_socket, message, strlen(message));
closesocket(new_socket);
}
}
__finally {
// Release ownership of the mutex object
if (! ReleaseMutex(pNetwork->m_ClientListMutex))
{
if(pNetwork->m_debugModus) printf("DEBUG MODUS: AcceptConnections: Cant Relese the Mutex\r\n");
}
}
}
else if (dwWaitResult == WAIT_ABANDONED)
{
if(pNetwork->m_debugModus) printf("DEBUG MODUS: SendDataThread: The thread got ownership of an abandoned mutex\r\n");
return FALSE;
}
}
else
{
if(pNetwork->m_debugModus) printf("DEBUG MODUS: accept failed with error code : %d\r\n" , WSAGetLastError());
}
}
return TRUE;
}