Модераторы: Alexeis
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> взаимодействие mfc клиента WinCE и C# сервера 
:(
    Опции темы
tavla
Дата 8.10.2010, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Есть три программы: сервер, клиент mfc и клиент mfc WinCE.
Если подключаться к серверу, формируя адрес следующим оразом
    hostByIP = inet_addr(hostStr);
    m_remoteAddress.sin_addr.s_addr = hostByIP;
    m_remoteAddress.sin_family = AF_INET;
    m_remoteAddress.sin_port = htons(remotePort);
    if(connect((unsigned int)s, (sockaddr *) &m_remoteAddress, sizeof (m_remoteAddress)) != 0)
        {…}
то connect(…) возвращает 0, подключения нет. Хотя спокойно подключается к серверу, написанному на mfc, ip адрес и порт в m_remoteAddress в обоих случаях определяются нормально.

Если формировать адрес через gethostbyname
    SOCKADDR_IN sAdr;
    hostent* pHost=gethostbyname(hostStr);
    memcpy ((char FAR *)&(sAdr.sin_addr),pHost->h_addr,pHost->h_length);
    sAdr.sin_port = htons(3000);
    sAdr.sin_family = AF_INET;
    if(connect((unsigned int)s, (PSOCKADDR) &sAdr, sizeof (sAdr)) != 0)
        {…}
то клиент ПК подключается к серверу, а в WinCE функция gethostbyname() возвращает 0 и программа вылетает с ошибкой.

Почему клиент не видит сервер? 
Почему не работает gethostbyname()? 
Почему при разных способах формирования адреса результат настолько разный? 
И как это исправить, нужно взаимодействие клиента (сервера) mfc wince и сервера (клиента) c# wpf 


Сервер C#:
Код

    public class Server
    {
        private int LocalPort;
        private IPAddress LocalServer;
        private Thread ServThread;
        Socket ClientSock;
        TcpListener Listener;

        public void Create(int port)
        {
            LocalPort = port;
            ServThread = new Thread(new ThreadStart(ServStart));
            ServThread.Start();
        }

        public void Close()
        {
            Listener.Stop();
            ServThread.Abort();
            return;
        }

        private void ServStart()
        {
            string data;
            byte[] cldata = new byte[1024];
            LocalServer = IPAddress.Parse("127.0.0.1");
            Listener = new TcpListener(LocalServer, LocalPort);
            Listener.Start();
            TcpClient client;

            try
            {
                ClientSock = Listener.AcceptSocket();
                //client = Listener.AcceptTcpClient();
            }
            catch
            {
                ServThread.Abort();
                MessageBox.Show("Error Listener.AcceptSocket");
                return;
            }
            int i = 0;

            if (ClientSock.Connected)
            {
                while (true)
                {
                    try
                    {
                        i = ClientSock.Receive(cldata);
                    }
                    catch
                    {
                        MessageBox.Show("Error ClientSock.Receive");
                    }

                    try
                    {
                        if (i > 0)
                        {

                            data = Encoding.UTF8.GetString(cldata).Trim();
                            MessageBox.Show("<" + data);
                            ClientSock.Send(Encoding.UTF8.GetBytes("Your data: " + data));
                        }
                    }
                    catch
                    {
                        ClientSock.Close();
                        Listener.Stop();
                        ServThread.Abort();
                        MessageBox.Show("Error data");
                    }
                }
            }
        }



Клиент mfc:
Код

bool CCESocket::Connect(CString &addr, UINT remotePort)
{
    char hostStr[257];
    int wHostLen;
    LPTSTR wHost;
    ulong hostByIP;
    HOSTENT *hostByName;

    if(!m_bWSAStarted)
        return FALSE;

    //Gets address string and convert it from unicode to multibyte
    wHostLen = addr.GetLength();
    if(wHostLen > 256)
        wHostLen = 256;
    wHost = addr.GetBuffer(wHostLen);
#ifdef _WIN32_WCE
    wcstombs(hostStr, wHost, 256);
#else
    wHost[wHostLen] = '\0';
    strcpy(hostStr, wHost);
    addr.ReleaseBuffer();
#endif
    
    //Builds destination address
    memset(&m_remoteAddress, 0, sizeof(SOCKADDR_IN));
    
    hostByIP = inet_addr(hostStr);
    m_remoteAddress.sin_addr.s_addr = hostByIP;
    m_remoteAddress.sin_family = AF_INET;
    m_remoteAddress.sin_port = htons(remotePort);

    //SOCKADDR_IN sAdr;
    //hostent* pHost=gethostbyname(hostStr);
    //memcpy ((char FAR *)&(sAdr.sin_addr),pHost->h_addr,pHost->h_length);
    //sAdr.sin_port = htons(3000);
    //sAdr.sin_family = AF_INET;

    //Connects if TCP.
    //UDP is connectionless. However we'll use m_remoteAddress for sending data.
    if(m_socketType == SOCK_STREAM)
    {
        //if(connect((unsigned int)s, (PSOCKADDR) &sAdr, sizeof (sAdr)) != 0)
        if(connect((unsigned int)s, (sockaddr *) &m_remoteAddress, sizeof (m_remoteAddress)) != 0)

        {
            m_errorCode = WSAGetLastError();
            return FALSE;
        }
        m_socketState = CONNECTED;

        //TCP: Start reading thread
        //UDP: Can't start it now, we must first do a sendto to bind to a local port
        m_readThread = CreateThread(NULL, 0, StartThread, this, 0, NULL );
    }
    else
    {
        m_udpReadyToSend  = TRUE;
        m_socketState = CONNECTED;
    }

    return TRUE;
}



Это сообщение отредактировал(а) tavla - 8.10.2010, 18:20

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  progs.rar 325,39 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование мобильных устройств"
Alexeis

Раздел посвящен программированию мобильных устройств.

Все остальные вопросы по мобильным устройствам (КПК, смартфоны, телефоны, фотоаппараты и т.п),
не имеющие отношения к программированию, просьба размещать в разделе КПК, смартфоны, мобильники

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Платформы Windows Mobile и Windows Embedded | Следующая тема »


 




[ Время генерации скрипта: 0.1029 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.