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

Каракули в строке после пересылки через сеть по TCP протоколу

29.08.2020, 19:19. Показов 2067. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, дорогие друзья. Прошу помочь в решении данной проблемы.

На входе:
Name: "9 шагов здоровой потери веса"

На выходе:
Name: "9 ��агов здоровой потери веса"

Код клиента:
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
using Newtonsoft.Json;
using Objects;
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
 
namespace DataTableHandler
{
    public class TcpClient<T> where T : Book
    {
        internal BooksFromServer<T> RunConnection(string ip, int port, string json)
        {
            var tcpEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);
            var tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            var data = Encoding.UTF8.GetBytes(json);
 
            try
            {
                tcpSocket.Connect(tcpEndPoint);
                tcpSocket.Send(data);
 
                var buffer = new byte[256];
                var answer = new StringBuilder();
 
                do
                {
                    var size = tcpSocket.Receive(buffer);
                    answer.Append(Encoding.UTF8.GetString(buffer, 0, size));
                }
                while (tcpSocket.Available > 0);
 
                tcpSocket.Shutdown(SocketShutdown.Both);
                tcpSocket.Close();
 
                var books = JsonConvert.DeserializeObject<BooksFromServer<T>>(answer.ToString());
 
                return books;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return new BooksFromServer<T>() { };
            }
        }
    }
}
Код сервера:
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
using DataBase;
using Newtonsoft.Json;
using Objects;
using Server.Interfaces;
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
 
namespace Server
{
    internal class TcpServer<T> where T : Book
    {
        public Func<BookDb, string> GetPathFunc { get; set; }
        public TcpServer(Func<BookDb, string> getPathFunc)
        {
            GetPathFunc = getPathFunc;
        }
        internal string RunConnection(string ip, int port)
        {
            var tcpEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);
            var tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            tcpSocket.Bind(tcpEndPoint);
            tcpSocket.Listen(5);
 
            var eventClass = new EventClass<T>();
            eventClass.RunCoverLogic += EventClass_RunCoverLogic;
 
            try
            {
                while (true)
                {
                    var listener = tcpSocket.Accept();
                    var buffer = new byte[256];
                    var data = new StringBuilder();
 
                    do
                    {
                        var size = listener.Receive(buffer);
                        data.Append(Encoding.UTF8.GetString(buffer, 0, size));
                    } while (listener.Available > 0);
 
                    var booksForReturn = eventClass.DataCheck(data.ToString());
                    var json = JsonConvert.SerializeObject(booksForReturn);
                    var answer = Encoding.UTF8.GetBytes(json);
                    listener.Send(answer);
 
                    listener.Shutdown(SocketShutdown.Both);
                    listener.Close();
                }
            }
            catch (Exception e)
            {
                return e.Message;
            }
        }
 
        private BooksFromServer<T> EventClass_RunCoverLogic(string json)
        {
            var books = JsonConvert.DeserializeObject<List<T>>(json);
 
            var missingBooks = ISearchFilesInDataBase<T>.SetFilesPaths(books, GetPathFunc);
            var queiesForPrinting = IQueuesForPrinting<T>.GetQueues(books);
 
            return new BooksFromServer<T>()
            {
                MissingBooks = missingBooks,
                QueuesForPrinting = queiesForPrinting
            };
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.08.2020, 19:19
Ответы с готовыми решениями:

Кодировка для пересылки кирилицы через сеть
Доброго времени суток господа программисты ! Такой вопрос, с какой кодировеой нужно кодировать текст с кирилицей, чтобы после прохождения...

Сеть через tcp\ip
void __fastcall TMainForm::Button1Click(TObject *Sender) { if(!IdTCPClient1-&gt;Connected())IdTCPClient1-&gt;Connect(); } ...

Как создать локальную сеть через протокол TCP\IPv6?
как создать локальную сеть через протокол TCP\IPv6? ДАНО: роутер D-LINK DIR-300 rev. B7, интернет протокола tcp\ipv4 (DSL-Ростелеком),...

4
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
29.08.2020, 19:42
Лучший ответ Сообщение было отмечено Gagarin23 как решение

Решение

C#
1
2
3
4
5
6
7
8
                var answer = new StringBuilder();
 
                do
                {
                    var size = tcpSocket.Receive(buffer);
                    answer.Append(Encoding.UTF8.GetString(buffer, 0, size));
                }
                while (tcpSocket.Available > 0);
нельзя так делать...

Добавлено через 6 минут
Раз у вас код все равно синхронный, переделайте на TcpClient/TcpListener+BinaryReader/BinaryWriter...

Например клиент (сервер переделывается аналогично)
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
    public class TcpClient<T> where T : Book
    {
        internal BooksFromServer<T> RunConnection(string ip, int port, string json)
        {
            using (var tcpClient = new TcpClient())
            {
                try
                {
                    tcpClient.Connect(new IPEndPoint(IPAddress.Parse(ip), port));
                    using (var ns = tcpClient.GetStream())
                    using (var bw = new BinaryWriter(ns, Encoding.UTF8))
                    using (var br = new BinaryReader(ns, Encoding.UTF8))
                    {
                        bw.Write(json);
                        string answer = br.ReadString();
                        return JsonConvert.DeserializeObject<BooksFromServer<T>>(answer);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return new BooksFromServer<T>() { };
                }
            }
        }
    }
1
1 / 1 / 0
Регистрация: 09.05.2020
Сообщений: 60
29.08.2020, 20:54  [ТС]
Проблемы с сервером :/
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
        internal void RunConnection(string ip, int port)
        {
            var eventClass = new EventClass<T>();
            eventClass.RunCoverLogic += EventClass_RunCoverLogic;
 
            var tcpListener = new TcpListener(IPAddress.Parse(ip), port);
 
            try
            {
                tcpListener.Start();
                using (var ns = tcpListener.???) //что-то я делаю не так
                using (var bw = new BinaryWriter(ns, Encoding.UTF8))
                using (var br = new BinaryReader(ns, Encoding.UTF8))
                {
                    string data = br.ReadString();
                    var booksForReturn = eventClass.DataCheck(data.ToString());
                    var json = JsonConvert.SerializeObject(booksForReturn);
                    var answer = Encoding.UTF8.GetBytes(json);
                    bw.Write(answer);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
29.08.2020, 21:00
Лучший ответ Сообщение было отмечено Gagarin23 как решение

Решение

Цитата Сообщение от Gagarin23 Посмотреть сообщение
Проблемы с сервером :/
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
        internal void RunConnection(string ip, int port)
        {
            var eventClass = new EventClass<T>();
            eventClass.RunCoverLogic += EventClass_RunCoverLogic;
 
            var tcpListener = new TcpListener(IPAddress.Parse(ip), port);
 
            try
            {
                tcpListener.Start();
 
                while (true)
                {
                    using (TcpClient client = tcpListener.AcceptTcpClient())
                    using (var ns = client.GetStream())
                    using (var bw = new BinaryWriter(ns, Encoding.UTF8))
                    using (var br = new BinaryReader(ns, Encoding.UTF8))
                    {
                        string data = br.ReadString();
                        var booksForReturn = eventClass.DataCheck(data);
                        var json = JsonConvert.SerializeObject(booksForReturn);
                        bw.Write(json);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
1
1 / 1 / 0
Регистрация: 09.05.2020
Сообщений: 60
29.08.2020, 21:09  [ТС]
Премного благодарен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.08.2020, 21:09
Помогаю со студенческими работами здесь

Прием данных по протоколу TCP
Делаю программу, которая принимает данные по TCP протоколу с помощью сокета. Данные представляют собой пакеты размером 40 байт. Посылаются...

Запрос по протоколу tcp php
Подскажите как соединится с сервером по протоколу tcp и отправить команду скриптом PHP?

Ошибка соединения по протоколу TCP
WCF соединений по TCP делаю по примеру и не получается вот пример конфига &lt;?xml version=&quot;1.0&quot;...

Не хочет соединяться по протоколу TCP [Indy]
Здравствуйте, я делаю две программы, одна сервер а другая клиент. Но они никак не соединяются. Как быть. Вот коды обеих программ....

PHP АПИ сервер по протоколу TCP
Привет. Дайте пожалуйста совет по технологиям для данной задачи Задача следующая: Есть у нас, например, андроид приложение которое...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru