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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> связь нескольких модемов с компьютером
Evgeniy_K
сообщение Oct 28 2008, 07:23
Сообщение #16


Участник
*

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



Есть решение сервера на С++ для TCP/IP клиентов - элементарное
Go to the top of the page
 
+Quote Post
dimonbest
сообщение Oct 30 2008, 10:11
Сообщение #17


Участник
*

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



Цитата(Evgeniy_K @ Oct 28 2008, 10:23) *
Есть решение сервера на С++ для TCP/IP клиентов - элементарное

Можно по подробней?
Go to the top of the page
 
+Quote Post
Evgeniy_K
сообщение Nov 16 2008, 07:44
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 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

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

 


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


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