Асинхронный веб-сокет

Gor

Client
Регистрация
30.09.2016
Сообщения
248
Благодарностей
30
Баллы
28
Приветствую, друзья!
У меня не вполне получилось применить предложенный код в этой теме
Может руки кривы, может не понял что. Но мне очень нужно написать клиент, который будет отправлять сообщение по адресу
wss://ws.dream-singles.com/ws
вот эти данные:
{"type":"auth","connection":"invite","subscribe_to":["auth-response","chat-invites-response","user-matches-response","presence-change","system-message"],"payload":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ3d3cuZHJlYW0tc2luZ2xlcy5jb20iLCJhdWQiOiJkbV9jaGF0IiwiaWF0IjoxNjExNjU5ODYwLCJleHAiOjE2MTI3NzE4NjAsInN1YiI6IjU1NTE3ODgiLCJnZW5kZXIiOiJtIn0.WNcSP7VFacYdj1D9qnGCsovjaw1oJA7-FMhKVLXtuJg"}

В результате чтобы вывести аккаунт в онлайн и в дальнейшем взаимодействовать с сервером, от него нужно получить такое:
71278

Начал изучать тему. Пошел на metanit, немного поколдовал со стандартным кодом из примеров. Вышло приложение-сервер, запускается в консольке, исходник его тут:
Server:
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace WebSocketServer
{
    class Program
    {
        static int port = 3610; // порт для приема входящих запросов
        static void Main(string[] args)
        {
            // получаем адреса для запуска сокета
            IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port);

            // создаем сокет
            Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                // связываем сокет с локальной точкой, по которой будем принимать данные
                listenSocket.Bind(ipPoint);

                // начинаем прослушивание
                listenSocket.Listen(10);

                Console.WriteLine("Сервер запущен. Ожидание подключений...");

                while (true)
                {
                    Socket handler = listenSocket.Accept();
                    // получаем сообщение
                    StringBuilder builder = new StringBuilder();
                    int bytes = 0; // количество полученных байтов
                    byte[] data = new byte[1024]; // буфер для получаемых данных

                    do
                    {
                        bytes = handler.Receive(data);
                        builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                    }
                    while (handler.Available > 0);

                    Console.WriteLine(DateTime.Now.ToShortTimeString() + ": " + builder.ToString());

                    // отправляем ответ
                    string message = "ваше сообщение доставлено";
                    data = Encoding.Unicode.GetBytes(message);
                    handler.Send(data);
                    // закрываем сокет
                    handler.Shutdown(SocketShutdown.Both);
                    handler.Close();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

Клиент запихнул в зенку, понятно. Запускается асинхронно. В общем коде такое:
Client:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
using HtmlAgilityPack;
using System.Xml;
using WebSocketSharp;
using WebSocketSharp.Server;
using WebSocketSharp.Net;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;

namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public static class CommonCode
    {
        public static void Wss(IZennoPosterProjectModel project) //определяем метод Wss
        {
            // адрес и порт сервера, к которому будем подключаться
            int port = 3610; // порт сервера
            string address = "127.0.0.1"; // адрес сервера
            IPEndPoint ipPoint = new IPEndPoint(IPAddress.Parse(address), port);

            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            // подключаемся к удаленному хосту
            socket.Connect(ipPoint);
            // отправляем ему сообщение
            string message = "Привет, сервер!";
            byte[] data = Encoding.Unicode.GetBytes(message);
            socket.Send(data);
            // мониторим входящие сообщения
            for (int i = 0; i < 5; i++)
            {
                if (project.Variables["wss_lock"].Value == "true")
                {
                    // получаем ответ
                    data = new byte[256]; // буфер для ответа
                    StringBuilder builder = new StringBuilder();
                    int bytes = 0; // количество полученных байт
                    do
                    {
                        bytes = socket.Receive(data, data.Length, 0);
                        builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                    }
                    while (socket.Available > 0);
                    if (builder.ToString().Length > 0)
                        project.SendInfoToLog("ответ сервера: " + builder.ToString(), true);
                    Thread.Sleep(3000);
                }
            }
            // закрываем сокет
            project.SendInfoToLog("Закрываем сокет", true);
            socket.Shutdown(SocketShutdown.Both);
            socket.Close();
        }

        public static async Task WssAsync(IZennoPosterProjectModel project) //определяем асинхронный метод 
        {
            await Task.Run(() => Wss(project)); //запуск метода Wss
        }

    }
}

Запуск асинхронной таски с клиентом из кубика так:
кубик:
CommonCode.WssAsync(project); //запускаем WSS асинхронно
И все как бы работает:
71279
но цель не достигнута.
Вопрос в том, как мне вместо того, чтобы отправить данные на ip адрес 127.0.0.1, порт 3610, отправить их на хост wss://ws.dream-singles.com/ws ?
 

Вложения

Последнее редактирование:

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)