Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 04.11.2016
Сообщений: 18
1

Веб сокеты

20.02.2017, 11:42. Показов 2705. Ответов 8

Author24 — интернет-сервис помощи студентам
Я делаю консольное приложение на c#, клиент на javascript. Соединение проходит хорошо, клиент говорит что соединился и рукопожатие прошло корректно. Однако, после, от клиента приходит вот такое сообщение:
Веб сокеты

У файла выставил кодировку UTF-8.
Вот код сервера:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading.Tasks;
using System.Security.Cryptography;
 
namespace WebSockProba
{
    class Program
    {
        const int PORT = 1994; // порт для прослушивания подключений
        static TcpListener listener;
        static void Main(string[] args)
        {
            try
            {
                /*listener = new TcpListener(IPAddress.Parse("127.0.0.1"), PORT);
                listener.Start();
                Console.WriteLine("Ожидание подключений...");
 
                while (true)
                {
                    TcpClient client = listener.AcceptTcpClient();
                    NetworkStream stream = client.GetStream();
 
                    StreamWriter writer = new StreamWriter(stream);
                    writer.AutoFlush = true;
                    StreamReader reader = new StreamReader(stream);
                    string message = reader.ReadToEnd();
                    Console.WriteLine("Получено: " + message);
 
                    
 
                    
                    client.Close();
                }*/
                Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPEndPoint point = new IPEndPoint(IPAddress.Any, 1994);
 
                sock.Bind(point);
 
                sock.Listen(10);
 
                string guid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
 
                while(true)
                {
                    try
                    {
                        Socket handler = sock.Accept();
                        NetworkStream stream = new NetworkStream(handler);
                        StreamReader reader = new StreamReader(stream);
 
                        string read = "";
                        string key = "";
                        while (!string.IsNullOrEmpty(read = reader.ReadLine()))
                        {
                            Console.WriteLine(read);
                            if (read.Length > 20 && read.Substring(0, 19) == "Sec-WebSocket-Key: ")
                            {
                                key = read.Substring(19);
                            }
                        }
 
                        SHA1 sha = new SHA1CryptoServiceProvider();
                        byte[] hash = sha.ComputeHash(Encoding.ASCII.GetBytes(key + guid));
                        string acceptKey = Convert.ToBase64String(hash);
                        //Console.WriteLine(acceptKey);
                        String response = "HTTP/1.1 101 Switching Protocols" + Environment.NewLine +
                              "Upgrade: websocket" + Environment.NewLine +
                              "Connection: Upgrade" + Environment.NewLine +
                              "Sec-WebSocket-Accept: " + acceptKey + Environment.NewLine +
                               Environment.NewLine;
                        handler.Send(Encoding.UTF8.GetBytes(response));
                        byte[] ddd = new byte[1024];
                        handler.Receive(ddd);
                        Encoding utf = Encoding.UTF8;
                        string Gdsd = utf.GetString(ddd);
                        Console.WriteLine("Send: " + Gdsd);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
    }
}
Клиент:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<head>
<script>
    var connection = new WebSocket('ws://127.0.0.1:1994');
 
    connection.onopen = function() {
        console.log('Connection open!');
        connection.send('111222');
        connection.close();
    }
 
    connection.onclose = function() {
        console.log('Connection closed');
    }
 
    connection.onerror = function(error) {
        console.log('Error detected: ' + error);
    }
</script>
</head>
Помогите пожалуйста добиться корректного общения между сервером и клиентом. Я думаю дело в кодировке или мб websockets в base64 переводит?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.02.2017, 11:42
Ответы с готовыми решениями:

Нужно написать веб приложения на С#, которые ищут веб страницы содержащие ключевое слово
Нужно написать веб приложения на С#, которые ищут веб страницы содержащие ключевое слово. Затем...

Сокеты
Привет всем! Есть простая программка по передаче файла по интерфейсу сокетов (TCP). Протестировала...

Сокеты
Привет. Нашел очень хороший исходник клиент-серверного чата, покопался в нем, немного изменил....

Сокеты
Здравствуйте! Есть приложение (а точнее чат &quot;VypressChat&quot;). Оно активно использует многоадресную...

8
0 / 0 / 0
Регистрация: 04.11.2016
Сообщений: 18
20.02.2017, 13:58  [ТС] 2
Неуежели никто не знает как помочь?((((
0
Эксперт .NET
12073 / 8383 / 1280
Регистрация: 21.01.2016
Сообщений: 31,578
20.02.2017, 14:02 3
Darprod, а ты уверен, что корректно реализовал протокол WebSocket?
0
0 / 0 / 0
Регистрация: 04.11.2016
Сообщений: 18
21.02.2017, 08:47  [ТС] 4
Ну клиент реагирует на событие connection.onopen - значит подключено. Ошибок нет не на клиентской, не на серверной стороне. Сообщения разрешает посылать от клиента. Только вот приходят они коряво.

Добавлено через 18 часов 42 минуты
Просто интересно почему кракозябры могут приходить, если кодировка UTF-8 и там и там
0
Эксперт .NET
12073 / 8383 / 1280
Регистрация: 21.01.2016
Сообщений: 31,578
21.02.2017, 09:02 5
Darprod, не факт, что сама консоль UTF-8 показывает. Посмотри на бинарное содержимое полученного сообщения, сравни с тем, что отправляется.
0
0 / 0 / 0
Регистрация: 04.11.2016
Сообщений: 18
21.02.2017, 09:08  [ТС] 6
Хорошо, но вот только не подскажете как это сделать? Просто вывести массив байтов? И в javaScript и в c#?
0
Эксперт .NET
12073 / 8383 / 1280
Регистрация: 21.01.2016
Сообщений: 31,578
21.02.2017, 09:12 7
Darprod, да
0
0 / 0 / 0
Регистрация: 04.11.2016
Сообщений: 18
21.02.2017, 09:26  [ТС] 8
Сделал
в javascript массив байтов выглядит так:
49,49,49,50,50,50
в c#:
81-86-14-19-39-48-25-28-08-7A-26-2B

Не знаете почему он иначе выглядит?
0
Эксперт .NET
12073 / 8383 / 1280
Регистрация: 21.01.2016
Сообщений: 31,578
21.02.2017, 09:30 9
Darprod, это либо не то, что ты отсылал, либо данные зашифрованы. Рекомендую внимательно изучить протокол WebSocket, чтобы точно знать.
0
21.02.2017, 09:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2017, 09:30
Помогаю со студенческими работами здесь

Сокеты
Люди, хелп. Скоро сдача проэкта, а я имею неприятный глюк. Короче, пересылаю массив байтов,...

try catch и сокеты
Есть библиотека классов ,в ней есть класс для передачи данных через TCP\IP.Я добавил в один из...

Сокеты.Сериализация
Клиент и сервер на синхронных сокетах. Нужно сериализовать данные(объект) и отправить по сокету и...

и снова сокеты
решил написать фтп-клиент, используя сокеты. вот код функции подключения к серверу: public...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru