Перейти к содержанию
    

связь нескольких модемов с компьютером

Есть решение сервера на С++ для TCP/IP клиентов - элементарное

Можно по подробней?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот минимальный кусок для 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 - № порта, через который обмен

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...