Evgeniy_K 0 28 октября, 2008 Опубликовано 28 октября, 2008 · Жалоба Есть решение сервера на С++ для TCP/IP клиентов - элементарное Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimonbest 0 30 октября, 2008 Опубликовано 30 октября, 2008 · Жалоба Есть решение сервера на С++ для TCP/IP клиентов - элементарное Можно по подробней? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Evgeniy_K 0 16 ноября, 2008 Опубликовано 16 ноября, 2008 · Жалоба Вот минимальный кусок для VS С++ ver.6 для понимания, проект с MFC создать самим. Основан на примере из MSDN, там есть рабочий проект. Проверить работу можно даже на одном компе, используя в качестве клиента стандартный HyperTerminal (Windows): #include "stdafx.h" #include <afxsock.h> class CClientSocket : public CSocket { public: int no;//id bool isClosed; void close(); CClientSocket(); //constructor // Overridable callbacks protected: virtual void OnReceive(int nErrorCode); }; PutErr(){ //ñîîáù îá îø LPTSTR lpMsgBuf; DWORD dwError = GetLastError(); if(dwError==0)return 0; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); char s[20]; sprintf(s,"Îøèáêà:%u",dwError); MessageBox( NULL, lpMsgBuf, s, MB_OK|MB_ICONINFORMATION ); LocalFree( lpMsgBuf );// Free the buffer. return dwError; } CClientSocket *pLastSocket, *pnSocket, *m_connectionList[MAXGPRS]; void CClientSocket ::close(){ if(isClosed)return; isClosed=1; m_connectionList[no]=NULL; Send("Disconnect\n",11); ShutDown(); } CClientSocket ::CClientSocket(){isClosed=0; no=0;} //constructor void CClientSocket ::OnReceive(int nErrorCode){ //îáðàáîòêà ïîëó÷àåìûõ äàííûõ CSocket::OnReceive(nErrorCode); CClientSocket* pSocket=this; TCHAR buff[4096]; int nRead; try{ nRead = pSocket->Receive(buff, sizeof(buff)-1); switch (nRead) { case 0: printf("Null Receive!"); break; case SOCKET_ERROR: if (GetLastError() != WSAEWOULDBLOCK) PutErr(); break; default: buff[nRead] = 0; //terminate the string CString szTemp(buff); pSocket->Send("yes!\n",5); } if(no>0){ if(m_connectionList[no] && m_connectionList[no]!=this)printf("Change client %d!\a",no); m_connectionList[no]=this; } }catch(...){} } class CListeningSocket : public CSocket { // Overridable callbacks protected: virtual void OnAccept(int nErrorCode){ //íîâûé êëèåíò CSocket::OnAccept(nErrorCode); CClientSocket* pSocket = new CClientSocket(); if (Accept(*pSocket)) { pLastSocket=pSocket; printf("Client in"); } else delete pSocket; } }; CListeningSocket Sock; CListeningSocket* m_pSocket; //êëàññ è ðåñóðñû äëÿ äèàëîãà ñîçäàòü ñàìèì, òóò ïðèìåð èíèöèàöèè ///////////////////////////////////////////////////////////////////////////// // CChatDlg message handlers BOOL CChatDlg::OnInitDialog() { CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here m_pSocket = &Sock; //700 - ¹ ïîðòà, ÷åðåç êîòîðûé îáìåí if (!m_pSocket->Create(700)){PutErr(); return TRUE;} if (!m_pSocket->Listen()){PutErr(); return TRUE;} printf("Wait clients..."); return TRUE; // return TRUE unless you set the focus to a control } //700 - № порта, через который обмен Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться