реклама на сайте
подробности

 
 
> связь нескольких модемов с компьютером
dimonbest
сообщение Aug 29 2008, 07:38
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 15-07-07
Пользователь №: 29 137



Недавно организовал связь точка-точка через tcp сокет.
Теперь возникла следующая задача:
Есть 5 модемов (количество будет меняться) и компьютер с выходом в интернет.
И этот самый компьютер должен опрашивать эти модемы и передавать им команды.

Есть вариант такой: модемы будут скидывать файлы на ftp, а комп считывать их. Но тогда надежность системы будет зависеть от оператора и от сервера. А хочется чтоб только от оператора.
Тоже самое можно сделать через почту.

Можна сделать как то только через оператора, без участия почты и ftp сервера?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Evgeniy_K
сообщение Nov 16 2008, 07:44
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 12-02-08
Пользователь №: 34 962



Вот минимальный кусок для 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 - № порта, через который обмен
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- dimonbest   связь нескольких модемов с компьютером   Aug 29 2008, 07:38
- - skaarj   Цитата(dimonbest @ Aug 29 2008, 10:38) Ес...   Aug 29 2008, 08:21
|- - dimonbest   Цитата(skaarj @ Aug 29 2008, 12:21) решаю...   Aug 29 2008, 12:15
|- - Baser   Цитата(dimonbest @ Aug 29 2008, 15:15) На...   Aug 29 2008, 12:50
- - Baser   Цитата(dimonbest @ Aug 29 2008, 10:38) .....   Aug 29 2008, 10:13
- - skaarj   допустил неточность. вобщем я соединяюсь с удаленн...   Aug 29 2008, 12:37
|- - dimonbest   Цитата(skaarj @ Aug 29 2008, 16:37) ...на...   Aug 29 2008, 12:50
|- - skaarj   Цитата(dimonbest @ Aug 29 2008, 15:50) А ...   Aug 29 2008, 16:37
|- - dimonbest   Блин, в голове уже полная каша. Давайте более подр...   Sep 2 2008, 07:12
- - million68   На мой взгляд можно организовать так: Клиенты пере...   Sep 2 2008, 12:25
|- - dimonbest   Спасибо за подробное разъяснение! Есть вопросы...   Sep 2 2008, 12:36
||- - Baser   Цитата(dimonbest @ Sep 2 2008, 15:36) Кли...   Sep 2 2008, 13:16
|- - dimonbest   Цитата(million68 @ Sep 2 2008, 16:25) Для...   Sep 4 2008, 07:18
- - million68   Цитата(dimonbest @ Sep 4 2008, 11:18) Мож...   Sep 5 2008, 05:42
|- - dimonbest   Появилась следующая проблема. На делфи делаю TCPse...   Oct 23 2008, 14:05
- - Evgeniy_K   Есть решение сервера на С++ для TCP/IP клиентов - ...   Oct 28 2008, 07:23
|- - dimonbest   Цитата(Evgeniy_K @ Oct 28 2008, 10:23) Ес...   Oct 30 2008, 10:11


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 04:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016