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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TCP/IP между WinCE и WinXP 
:(
    Опции темы
Xonxt
Дата 5.7.2008, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 24.1.2006
Где: Украина / Одесса

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



Итак, мне нужно осуществить сабж. Ввиду отсутствия эмулятора WinCE в вижуал студии 2005, мне приходится делать это в вижуал студии 2003 (если кто-то знает, как эту проблему решить, будьте добры поделиться).

Разумеется, сначала программы была реализована при соединении двух WinXP-компьютеров. Программа выглядела так:

(из кода кое-что лишнее, что не имеет отношения к делу, вырезано)
Сервер
Код

public class Form1 : Form
{
    class ClientHandler
    {
        private Socket socket;
        private NetworkStream networkStreamReader, networkStreamWriter;
        private System.IO.StreamWriter writer;
        private System.IO.StreamReader reader;
        private Thread threadRead;
        private Form1 parent;
        private string name;

        public ClientHandler(Socket socketForClient)
        {
            socket = socketForClient;
        }

        public void StartRead()
        {
            threadRead = new Thread(new ThreadStart(Read));
            threadRead.Start();
        }

        private void Read()        // чтение в отдельном потоке
        {
            networkStreamReader = new NetworkStream(this.socket);
            reader = new System.IO.StreamReader(networkStreamReader);

            String message;

            try
            {
                while (true)
                {
                    if ((message = reader.ReadLine()) != null)
                    {
                        // обработка сообщения
                    }
                }
            }
            catch
            {
                // ошибка
            }
            reader.Close();
            networkStreamReader.Close();
        }

        public void SendTextToClient(string message)    // отправка сообщений клиентам
        {
            networkStreamWriter = new NetworkStream(this.socket);
            writer = new System.IO.StreamWriter(networkStreamWriter);

            if (message != null)
            {
                writer.WriteLine(message);
                writer.Flush();
            }
            networkStreamWriter.Close();
            writer.Close();
        }
    }

    private TcpListener listener;
    private Socket socket;
    private const int port = 65000;
    private List<ClientHandler> handlers = new List<ClientHandler>();

    private Thread thread;

    public Form1()
    {
        InitializeComponent();
        Start();
    }

    private void Start()
    {
        thread = new Thread(new ThreadStart(Listen));
        thread.Start();
    }

    private void Listen()
    {
        listener = new TcpListener(port);
        listener.Start();

        while (true)
        {
            socket = listener.AcceptSocket();
            if (socket.Connected)
            {
                ClientHandler handler = new ClientHandler(socket);   // создание экземпляра
                handler.StartRead();
                handlers.Add(handler);      // и добавление его в список              
                isConnected = true;
                count++;
            }
        }
    }
}


Клиент
Код


public class Form1 : Form
{
    private const int port = 65000;
    private string host = "localhost";
    private NetworkStream networkStreamRead, networkStreamWrite;
    private System.IO.StreamReader reader;
    private TcpClient client;
    private Socket socket;
    private Thread thread;

    public Form1()
    {
        InitializeComponent();
        connect();
    }

    private void connect()
    {
        try
        {
            client = new TcpClient(host, port);
        }
        catch
        {
            // failed to connect!
        }
        finally
        {
            socket = client.Client;
            thread = new Thread(new ThreadStart(Read));
            thread.Start();
        }
    }

    private void Read()    // чтение сообщений в отдельном потоке
    {
        networkStreamRead = client.GetStream();
        reader = new System.IO.StreamReader(networkStreamRead);

        String message;
        try
        {
            while (true)
            {
                if ((message = reader.ReadLine()) != null)
                {
                    // обработка полученного сообщения!
                }
            }
        }
        catch
        {
            // ошибка
        }
        reader.Close();
        networkStreamRead.Close();
    }

    private void SendText(string message)        // отправка сообщений серверу
    {
        networkStreamWrite = new NetworkStream(socket);
        System.IO.StreamWriter writer = new System.IO.StreamWriter(networkStreamWrite);

        if (message != null)
        {
            writer.WriteLine(message);
            writer.Flush();
        }
        networkStreamWrite.Close();
        writer.Close();
    }
}


Таким образом реализовалась возможность подключения любого количества клиентов к серверу, отправлка сообщений от клиентов серверу и отправка сообщений от сервера любому улиенту из списка handlers. Программа много раз тестировалась и отлично работает.

Теперь необходимо сделать то же самое с Windows CE. В частности, необходимо было перенести на эту платформу мой сервер. Сказано - сделано. Программа переписана и запущена под эмулятором WinCE 4.1 (встроенным в 2003-ю студию). Программа даже запустилась! А вот с клиентом проблема. Клиент должен быть запущен из под Windows XP и подсоединен к серверу, запущенному в Windows CE. 

Вот только я не знаю, к какому адресу следует подключаться ("locahost" не работает)! 
user posted image
В эмуляторе сеть работает 100%, т.к. из под эмулятора я выхожу в интернет и пингую IP своего компьютера (192.168.х.х).

Что я делаю не так?

Это сообщение отредактировал(а) Xonxt - 5.7.2008, 21:40
PM MAIL ICQ Skype   Вверх
Xonxt
Дата 5.7.2008, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 24.1.2006
Где: Украина / Одесса

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



Когда я попробовал запустить оба приложения (и клиент, и сервер) под Windows CE, то они более-менее нормально работают...
PM MAIL ICQ Skype   Вверх
Xonxt
Дата 5.7.2008, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 24.1.2006
Где: Украина / Одесса

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



Только что я попробовал сделать наоборот. Я запустил клиента на эмулятора и сервак на своей машине и попробовал законектить клаиента к внешнему IP-адресу своей машины - и оно нормально соединилось!

Т.е. мне нудно либо как-то настроить, либо как-то получить локальный или внешний IP-адрес машины на эмуляторе...
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование мобильных устройств"
Alexeis

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

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

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


 




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


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

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