从Windows Phone 8发送信息到Pc Window 7窗体

时间:2014-11-03 04:39:05

标签: c# windows-phone-8

我正在尝试从我的Windows手机向计算机发送信息。我读了一些usb电缆被视为以太网电缆的地方。我创建了一个服务器和一个客户端(Phone是客户端)来尝试发送信息。程序每按一次输入就会发送一条消息。

客户端

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();
    }
}

}

信息不能连接到中间的某个地方。双方都没有打破。当我通过向环回发送信息来测试表单时,它可以工作。我不知道为什么信息没有到达另一方。你能否告诉我,如果我正在写这篇文章,并且假设这样做,或者你能告诉我这是不可能的,所以我可以停止工作。

2 个答案:

答案 0 :(得分:0)

不可能。

通过USB的TCP / IP在Windows Phone 7中正常工作。但在Windows Phone 8中,他们删除了该功能。

寻求其他选择。

你可以通过WiFi使用TCP / IP,或者使用BT,或者将数据写入“Documents”并使用MTP COM API读取,或者将数据写入隔离存储并使用isetool.exe读取它(这只适用于dev .unlocked devices)。

答案 1 :(得分:0)

我看到了类似的问题,我在那里回答,Communicate to PC over USB

它需要编辑注册表,设备上运行的服务器代码,我不确定代码是否会在开发环境之外运行(我只需要这样就可以加快我的工作流程和调试 - 所以它不是问题)