Отправка информации с Windows Phone 8 на ПК Windows 7 формы формы

1

Я пытаюсь отправить информацию с моего телефона Windows на компьютер. Я читал, где кабель USB используется как кабель Ethernet. Я создал сервер и клиент (Phone is client), чтобы попытаться отправить информацию. Программа отправляет сообщение каждый раз, когда нажимает клавишу ввода.

Сторона клиента

public sealed partial class MainPage : Page
{

    private bool Connected;

    public MainPage()
    {
        this.InitializeComponent();

        this.NavigationCacheMode = NavigationCacheMode.Required;
    }

    /// <summary>
    /// Invoked when this page is about to be displayed in a Frame.
    /// </summary>
    /// <param name="e">Event data that describes how this page was reached.
    /// This parameter is typically used to configure the page.</param>
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        // TODO: Prepare page for display here.

        // TODO: If your application contains multiple pages, ensure that you are
        // handling the hardware Back button by registering for the
        // Windows.Phone.UI.Input.HardwareButtons.BackPressed event.
        // If you are using the NavigationHelper provided by some templates,
        // this event is handled for you.
    }

    private DatagramSocket dataGramSocket = new DatagramSocket();
    private DataWriter socketWriter;
    private bool messageSent;
    private static string port = "138";

    private void Grid_Loaded(object sender, RoutedEventArgs e)
    {
        dataGramSocket.MessageReceived += dataGramSocket_MessageReceived;
        StartListener();
    }

    void dataGramSocket_MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
    {

    }

    private async void StartListener()
    {


        string IpHostname = "127.0.0.1";

        var IpAdresses = NetworkInformation.GetHostNames();


        for (int i = 0; i < IpAdresses.Count; i++)
        {
            if (IpAdresses[i].IPInformation != null)
            {
                if (IpAdresses[i].IPInformation.NetworkAdapter.IanaInterfaceType == 6 && IpAdresses[i].DisplayName != null)
                {
                    IpHostname = IpAdresses[i].DisplayName;
                    break;
                }
                else if (IpAdresses[i].IPInformation.NetworkAdapter.IanaInterfaceType == 71 && IpAdresses[i].DisplayName != null)
                {
                    IpHostname = IpAdresses[i].DisplayName;
                    break;
                }

            }

        }





        HostName host = new HostName(IpHostname);
        //EndpointPair endpoint = new EndpointPair(localHostName,)
        await dataGramSocket.BindServiceNameAsync(port);
        await dataGramSocket.ConnectAsync(host, port);
        socketWriter = new DataWriter(dataGramSocket.OutputStream);
        Connected = true;
    }


    private async void SendPacket()
    {
        await socketWriter.StoreAsync();
        messageSent = true;
    }

    private void TextBox1_KeyDown(object sender, KeyRoutedEventArgs e)
    {
        if(e.Key == Windows.System.VirtualKey.Enter)
        {
            SendMessage(textBox1.Text);
        }
    }

    private void SendMessage(string message)
    {
        socketWriter.WriteString(message);
        SendPacket();
        textBox1.Text = "";
    }

}

}

Серверная сторона

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private static int port = 138;
    private readonly CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource();
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        Task.Factory.StartNew(() =>
        {
            var dataStream = new MemoryStream(1024);
            var udpClient = new UdpClient(port);
            while (true)
            {
                if (udpClient.Available > 0)
                {
                    udpClient.BeginReceive(ar =>
                    {
                        var clientEndPoint = new IPEndPoint(IPAddress.Any, port);
                        var bytesReceived = udpClient.EndReceive(ar, ref clientEndPoint);
                        dataStream.Write(bytesReceived, 0, bytesReceived.Length);
                        if (bytesReceived.Length > 0)
                        {
                            UpdateUI(Encoding.UTF8.GetString(bytesReceived));
                            UpdateUI(Encoding.ASCII.GetString(bytesReceived));

                        }
                    }, null);
                }
                Thread.Sleep(1);
            }
        }, _cancellationTokenSource.Token);
    }

    private void UpdateUI(string message)
    {
        this.Invoke(new MethodInvoker(delegate
        {
            this.textBox1.Text += message + Environment.NewLine;
        }));
    }

    private void button1_Click_1(object sender, EventArgs e)
    {
        byte[] message = Encoding.UTF8.GetBytes(textBox2.Text);
        using (var udpClient = new UdpClient())
        {
            udpClient.Send(message, message.Length, new IPEndPoint(IPAddress.Loopback, port));
        }
        textBox2.Clear();
    }
}

}

Информация не соединяется где-то посередине. С обеих сторон ничего не сломается. Когда я тестирую форму, отправляя информацию в loopback, она работает. Я не знаю, почему информация не доходит до другой стороны. Не могли бы вы рассказать мне, выполняю ли я эту запись, и это должно быть сделано так, или вы можете сказать мне, если это невозможно, поэтому я могу перестать работать над этим.

Теги:
windows-phone-8

2 ответа

0
Лучший ответ

Я видел подобный вопрос, и я ответил там, общаюсь с ПК через USB.

Это требует редактирования реестра, кода сервера, запущенного на устройстве, и я не уверен, будет ли код работать за пределами среды разработки (мне это нужно только для ускорения моего рабочего процесса и отладки, поэтому это не проблема).

  • 0
    Когда я попробовал это, он говорит, что я должен преобразовать телефон в устройство хранения данных. У меня Nokia Lumia 920 и 521. Я не вижу учебников по этому поводу онлайн. То, что я нашел ключи реестра не существует. Вы знаете, как я могу преобразовать телефон в это?
  • 0
    Вы можете игнорировать раздел «Настройка телефона», который предназначен для OEM-производителей, на которых отладка ядра включена. Я использую SDK для Windows Phone 8.1, ключи реестра уже были там, и я мог проверить их, запустив «IpOverUsbEnum.exe», мне не нужно было ничего делать на устройстве.
0

Невозможно.

TCP/IP через USB работал нормально в Windows Phone 7. В Windows Phone 8 они удалили функциональность.

Ищите другие альтернативы.

Вы можете использовать TCP/IP через Wi-Fi или использовать BT или записывать данные в "Документы" и читать с помощью MTP COM API или записывать данные в изолированное хранилище и читать его с помощью isetool.exe (этот только работает для dev.unlocked devices).

  • 0
    Спасибо, я хотел знать также, почему UDP не работает через Wi-Fi? В части моего кода я получаю информацию о текущей беспроводной сети, к которой я подключен, и отправляю информацию. Это все еще не будет работать. Нужно использовать udp вместо tcp, потому что мне нужно быстро отправлять информацию, такую как потоковое аудио и отправлять текст.
  • 0
    A1. Потому что вы отправляете их на 127.0.0.1 вместо адреса вашего ПК? A2. Потому что ваш брандмауэр Windows блокирует этот трафик. Кроме того, на вашем месте я бы выбрал порт № 1024 - порты ниже № 1024 обычно используются для известных служб.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню