Xamarin表示套接字

时间:2017-11-12 20:27:45

标签: sockets tcp xamarin.forms

我没有得到它,我的朋友和我正在开发API并且我们的WebSocket服务可以工作,但不是移动端..我尝试了几个客户,在网络上,我们的echo消息一切正常。

事实是,我的意思是,套接字似乎是单向的。我尝试了https://github.com/rdavisau/sockets-for-pcl#a-tcp-client的例子:

var address = "127.0.0.1";
var port = 11000;
var r = new Random(); 

var client = new TcpSocketClient();
await client.ConnectAsync(address, port);

// we're connected!
for (int i = 0; i<5; i++)
{
    // write to the 'WriteStream' property of the socket client to send data
    var nextByte = (byte) r.Next(0,254);
    client.WriteStream.WriteByte(nextByte);
    await client.WriteStream.FlushAsync();

    // wait a little before sending the next bit of data
    await Task.Delay(TimeSpan.FromMilliseconds(500)); 
}

await client.DisconnectAsync();

首先,在我与此相关之后:

public async void ConnectSocketToAPIAsync()
    {
        SocketClient = new TcpSocketClient();
        await SocketClient.ConnectAsync("my.ws.service", 4242);
        ActiveSocketExchange();
    }

    public async void ActiveSocketExchange()
    {
        var bytesRead = -1;
        var buf = new byte[1];

        while (bytesRead != 0)
        {
            bytesRead = await SocketClient.ReadStream.ReadAsync(buf, 0, 1);
            if (bytesRead > 0)
                MessagingCenter.Send((App)Current, SOCKET_Message, System.Text.Encoding.UTF8.GetString(buf, 0, bytesRead));
        }
    }

一切都很好,我的TcpClient初始化很好(甚至web链接也成了http的API地址)

从我的页面视图来看,当我写完文本时,我按下键盘的完成按钮,这个代码被调用:

private void InitSocketPart()
    {
        MessagingCenter.Subscribe<App, string>((App)Application.Current, App.SOCKET_Message, (sender, text) =>
        {
            SocketResponseText = text;
        });
    }

    private async void OnTextCompleted(object sender, EventArgs ea)
    {
        var bytes = Encoding.UTF8.GetBytes(TextToSend);
        try {
            if (App.SocketClient.WriteStream.CanRead)
                Debug.WriteLine("canRead");
            if (App.SocketClient.WriteStream.CanWrite)
                Debug.WriteLine("canWrite");

            App.SocketClient.WriteStream.Write(bytes, 0, TextToSend.Length);
            App.SocketClient.WriteStream.Flush();
        } catch (Exception e)
        {
            Debug.WriteLine(e);
        }
    }

所以现在CanWrite&amp;&amp; CanRead是真的,但即使使用Async方法也没有任何结果......为什么会这样?我不明白..

使用消息传递中心只是只有一个传入消息点。我正在将它用于其他事情而且效果很好:)

感谢任何帮助..

0 个答案:

没有答案