Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 | 3 | 4 | 5 | 6 |

 

  Вопрос: русские буквы Добавлено: 21.09.10 15:53  

Автор вопроса:  Ishayahu | Web-сайт: ishayahu.blogspot.com | ICQ: 329944992 

Ответить

  Ответы Всего ответов: 90  

Номер ответа: 76
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #76 Добавлено: 26.09.10 02:09
Ishayahu пишет:
я извиняюсь, что влезаю в такой интересный спор (завтра засяду его разбирать), но на мой вопрос по поводу вопросов при посылке сообщений на сервер так и остался без ответа.


Вот как ты отправляешь:
  1. Dim writer As New IO.StreamWriter(client.GetStream)
  2. writer.Write(data & vbCr)
  3. writer.Flush()


Вот как считываешь:
  1. strMessage = Encoding.ASCII.GetString(readBuffer, 0, BytesRead - 2)


StreamWriter по умолчанию работает с кодировкой UTF8, если ты не указал в конструкторе конкретную кодировку.
Строку отправляешь в UTF8, принимаешь как ASCII. Отсюда и вопросики.
Или поменяй отправку на ASCII, или чтение на UTF8. Чтоб кодировки в обоих случаях были одинаковые.
Учти также что в UTF8 не любой символ имеет длину 1 байт, поэтому твой вариант чтения небудет корректно работать, так как он может принять сначала первый байт символа, следующей порцией второй, и соответственно текст будет раскодирован неверно.

Ответить

Номер ответа: 77
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #77 Добавлено: 26.09.10 02:10
AgentFire пишет:
честно говоря надеялся, что ТЫ предложишь

Я уже предложил - делать на асинхронных операциях IO.
Весь сервер на асинхронном IO под несложный протокол вмещается строчек в 300

Ответить

Номер ответа: 78
Автор ответа:
 BG(Алексей)



Вопросов: 26
Ответов: 295
 Профиль | | #78 Добавлено: 26.09.10 05:15
Ты кстати какой биндинг используешь?
Я использую два.
netTcpBinding и wsDualHttpBinding

Ответить

Номер ответа: 79
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #79 Добавлено: 26.09.10 10:40
зачем нужен биндинг

Ответить

Номер ответа: 80
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #80 Добавлено: 26.09.10 13:58
Давно таких продуктивных тем небыло, глаз радует.

Ответить

Номер ответа: 81
Автор ответа:
 Ishayahu



ICQ: 329944992 

Вопросов: 4
Ответов: 21
 Web-сайт: ishayahu.blogspot.com
 Профиль | | #81
Добавлено: 26.09.10 15:17
Artyomэто так считывает клиент, это я уже нашел и поправил, теперь проблема в том, что и на сервер приходят вопросы от клиента, но где сервер применяет кодировку я так и не нашел ((

Ответить

Номер ответа: 82
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #82 Добавлено: 27.09.10 01:28
Ищи где массив байт преобразовывается в строку и обратно. Если ты используешь StreamReader/StreamWriter, кодировка должна указываться в них, если не указана, по умолчанию используется UTF-8.
Сервер не может сам "применять" кодировку. это ж не живое существо с интелектом

Ответить

Номер ответа: 83
Автор ответа:
 Ishayahu



ICQ: 329944992 

Вопросов: 4
Ответов: 21
 Web-сайт: ishayahu.blogspot.com
 Профиль | | #83
Добавлено: 27.09.10 07:16
вот это место. Не вижу я тут таких преобразований((
  1. ' This is the event handler for the UserConnection when it receives a full line.
  2.     ' Parse the cammand and parameters and take appropriate action.
  3.     Private Sub OnLineReceived(ByVal sender As UserConnection, ByVal data As String)
  4.         Dim dataArray() As String
  5.  
  6.         ' Message parts are divided by "|"  Break the string into an array accordingly.
  7.         dataArray = data.Split(Chr(124))
  8.  
  9.         ' dataArray(0) is the command.
  10.         Select Case dataArray(0)
  11.             Case "CONNECT"
  12.                 ConnectUser(dataArray(1), sender)
  13.             Case "CHAT"
  14.                 SendChat(dataArray(1), sender)
  15.             Case "DISCONNECT"
  16.                 DisconnectUser(sender)
  17.             Case "REQUESTUSERS"
  18.                 ListUsers(sender)
  19.             Case "SRV"
  20.                 UpdateStatus("|" & dataArray(1))
  21.             Case Else
  22.                 UpdateStatus("Unknown message:" & data)
  23.         End Select
  24.     End Sub

Ответить

Номер ответа: 84
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #84 Добавлено: 27.09.10 09:41
здесь у тебя уже строка входная. а тебе нужно найти место где байтовый массив в нее превращяется

Ответить

Номер ответа: 85
Автор ответа:
 Ishayahu



ICQ: 329944992 

Вопросов: 4
Ответов: 21
 Web-сайт: ishayahu.blogspot.com
 Профиль | | #85
Добавлено: 27.09.10 10:40
AgentFireнету там в коде такого! эта процедура - обработчик client.LineReceived:

  1. ' This subroutine is used as a background listener thread to allow reading incoming
  2.     ' messages without lagging the user interface.
  3.     Private Sub DoListen()
  4.         Try
  5.             ' Listen for new connections.
  6.             listener = New TcpListener(System.Net.IPAddress.Any, PORT_NUM)
  7.             listener.Start()
  8.             Do
  9.                 ' Create a new user connection using TcpClient returned by
  10.                 ' TcpListener.AcceptTcpClient()
  11.                 Dim client As New UserConnection(listener.AcceptTcpClient)
  12.  
  13.                 ' Create an event handler to allow the UserConnection to communicate
  14.                 ' with the window.
  15.                 AddHandler client.LineReceived, AddressOf OnLineReceived
  16.                 UpdateStatus("New connection found: waiting for log-in")
  17.             Loop Until False
  18.         Catch
  19.         End Try
  20.     End Sub

Ответить

Номер ответа: 86
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #86 Добавлено: 27.09.10 10:48
а что естьclient.linereceived? ..

Ответить

Номер ответа: 87
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #87 Добавлено: 27.09.10 11:48
Класс UserConnection в студию

Ответить

Номер ответа: 88
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #88 Добавлено: 27.09.10 12:08
и я о том же..

Ответить

Номер ответа: 89
Автор ответа:
 Ishayahu



ICQ: 329944992 

Вопросов: 4
Ответов: 21
 Web-сайт: ishayahu.blogspot.com
 Профиль | | #89
Добавлено: 27.09.10 12:38
блин, спасибо! сто лет уже не программировал, вообще забыл что классы бывают)) все нашел.
еще раз спасибо!

Ответить

Номер ответа: 90
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #90 Добавлено: 27.09.10 15:33
AgentFire пишет:
зачем нужен биндинг

Нужно ковырять WCF чтоб это понять.

В двух словах, биндинг определяет то каким образом происходит подключение клиента к эндпоинту и как происходит коммуникация. В том числе: какой транспорт используется, какой протокол, как происходит кодирование сообщений и данных, как обеспечивается (и обеспечиватеся ли) безопасность, надежность передачи и т.п.
В коробке есть 12 биндингов, из которых добрая половина работает по HTTP, основана на открытых протоколах и может использоваться из сторонних платформ (всяих джав и делфей). Есть и те которые работают по TCP, UDP, Named Pipes, MSMQ, почти все они работают на недокументированых протоколах и в не предназначены для общения с другими платформами.

Если же юный друг достаточно умен, то без проблем наделает своих биндингов, работающих по ICQ, сжимающие данные и делающие еще более 9000 вещей (причем с блекджеком и ... ну ты понял)

Ответить

Страница: 1 | 2 | 3 | 4 | 5 | 6 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам