- Регистрация
- 30.09.2016
- Сообщения
- 250
- Благодарностей
- 30
- Баллы
- 28
Приветствую, друзья!
У меня не вполне получилось применить предложенный код в этой теме
вот эти данные:
В результате чтобы вывести аккаунт в онлайн и в дальнейшем взаимодействовать с сервером, от него нужно получить такое:
Начал изучать тему. Пошел на metanit, немного поколдовал со стандартным кодом из примеров. Вышло приложение-сервер, запускается в консольке, исходник его тут:
Клиент запихнул в зенку, понятно. Запускается асинхронно. В общем коде такое:
Запуск асинхронной таски с клиентом из кубика так:
И все как бы работает:
но цель не достигнута.
Вопрос в том, как мне вместо того, чтобы отправить данные на ip адрес 127.0.0.1, порт 3610, отправить их на хост wss://ws.dream-singles.com/ws ?
У меня не вполне получилось применить предложенный код в этой теме
https://zennolab.com/discussion/threads/asinxronnyj-websocket-dlja-vas-i-vashix-blizkix.70182/page-3
Может руки кривы, может не понял что. Но мне очень нужно написать клиент, который будет отправлять сообщение по адресу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"}
В результате чтобы вывести аккаунт в онлайн и в дальнейшем взаимодействовать с сервером, от него нужно получить такое:
Начал изучать тему. Пошел на 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 асинхронно
но цель не достигнута.
Вопрос в том, как мне вместо того, чтобы отправить данные на ip адрес 127.0.0.1, порт 3610, отправить их на хост wss://ws.dream-singles.com/ws ?
Вложения
-
17 КБ Просмотры: 13
Последнее редактирование: