TCP/IP связь между WinCE и WinXP

 
0
 
.NET
ava
Xonxt | 06.07.2008, 21:15
Дико извиняюсь, что дублирую тему, но всё же здесь больше народу, к тому же, тема имеет прямое отношение к этому разделу...

---------------------

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

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

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


public class Form1 : Form
{
class ClientHandler
{
private Socket socket;
private Thread threadRead;
private string name;

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

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

private void Read() // чтение в отдельном потоке
{
// читает сообщения из потока
}
}

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); // создание экземпляра ClientHandler
handler.StartRead();
handlers.Add(handler); // и добавление его в список
isConnected = true;
}
}
}
}


Клиент


public class Form1 : Form
{
private const int port = 65000;
private string host = "localhost";
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() // чтение сообщений в отдельном потоке
{
// чтение из потока
}
}


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

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

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

Когда я попробовал запустить оба приложения (и клиент, и сервер) под Windows CE, то они более-менее нормально работают...

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

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


P.S. извините, понятия не имею, почему код не сворачиваетмя и не подсвечивается...
Ответы (0)

Комментарии не добавлены

Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
  Xonxt
advanced
Отправить