Страница: 1 | 2 | 
		
		 
			   
			 
			 
			 
			 
			
 
  
		
     
  
    
Вопрос: Разделить винсок данные
     
    
Добавлено: 16.02.09 11:24
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
    
 AWР | Web-сайт: bomber.h17.ru | ICQ: 345685652 
      
       
  
Написал код для кнопки на форме в две строки. Первая:winsock.senddata(data1) вторая:winsock.senddata(data2). Проблема в том что при получении присланных данных они обрабатываются как одна строка а мне нужно как будто винсок прислал дважды разные данные а не одним разом в одну строку. Помогите 
 
    
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 16
     
      
  
		
	  
			 
	
		 
    
       
    
Номер ответа: 1 
      
Автор ответа:
 AgentFire
![]()
![]()
![]()
ICQ: 192496851 
Вопросов: 75
Ответов: 3178
      
 Профиль |  | #1
       
Добавлено:  16.02.09 11:34
       
    
       
  
У тебя Winsock под .NET?..  
    
И что значит прислал дважды, или трижды, кто тебе их присылает, и почему бы не юзать TcpClient?..
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа:
 Artyom
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Разработчик
Вопросов: 130
Ответов: 6602
      
 Профиль |  | #2
       
Добавлено:  16.02.09 12:04
       
    
       
  
Можно решить задачу разными способами.
 
    
Начиная от того, что перед передачей данных, отправлять длинну сообщения, заканчивая использованием WCF
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа:
 AWР
![]()
ICQ: 345685652 
Вопросов: 38
Ответов: 106
      
 Web-сайт:  
 Профиль |  | #3
      
Добавлено:  16.02.09 12:30
       
    
       
  
Что такое wcf? И тот способ что ты написал неприемлем так как дата1 и дата2 содержат данные разного типа. Дата1 это строка дата2 это битмап
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа:
 AWР
![]()
ICQ: 345685652 
Вопросов: 38
Ответов: 106
      
 Web-сайт:  
 Профиль |  | #4
      
Добавлено:  16.02.09 12:31
       
    
       
  
Я имею ввиду они в принципе не смогут быть в одном сообщений
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа:
 AWР
![]()
ICQ: 345685652 
Вопросов: 38
Ответов: 106
      
 Web-сайт:  
 Профиль |  | #5
      
Добавлено:  16.02.09 12:33
       
    
       
  
Agentfire научи использовать tcpClient кратко если не жалко
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа:
 Artyom
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Разработчик
Вопросов: 130
Ответов: 6602
      
 Профиль |  | #6
       
Добавлено:  16.02.09 12:59
       
    
       
  
 
    
Windows Communication Foundation - платформа для коммуникаций. Очень много интересной информации можно найти, набрав в адресной строке адрес "live.com" и введя в поле поиска интересующий тебя запрос.
А чем строка принципиально отличается от битмапа?
		
	  
			 
	
		 
    
       
    
Номер ответа: 7 
      
Автор ответа:
 Sneaks
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Вопросов: 9
Ответов: 84
      
 Профиль |  | #7
       
Добавлено:  16.02.09 14:49
       
    
       
  
пользуй разделительный знак сообщений, при получении разбивай по этому знаку на отдельный сообщение и обрабатывай, это первый и правильный вариант. Второй, не знаю как в нете, но в 6.0 делай дуэвент, в это время он отошлет сообщение и следующие будет идти отдельно. Но первый вариант правильный!
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 8 
      
Автор ответа:
 Artyom
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Разработчик
Вопросов: 130
Ответов: 6602
      
 Профиль |  | #8
       
Добавлено:  16.02.09 21:31
       
    
       
  
А с чего ты взял что первый вариант правильный?
 
    
Если в передаваемом сообщении и так будет знак, которым ты собираешься эти сообщения разбивать на части? Тогда все это сработает неверно.
По второй вариант даже говорить бесполезно, он вообще не будет работать.
		
	  
			 
	
		 
    
       
    
Номер ответа: 9 
      
Автор ответа:
 Sneaks
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Вопросов: 9
Ответов: 84
      
 Профиль |  | #9
       
Добавлено:  17.02.09 09:15
       
    
       
  
ну во первых можно пользоваться vbCrLf, а во вторых ты потести а потом скажеш. ПС: вб 6.0 на нете, я хз.
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 10 
      
Автор ответа:
 AgentFire
![]()
![]()
![]()
ICQ: 192496851 
Вопросов: 75
Ответов: 3178
      
 Профиль |  | #10
       
Добавлено:  17.02.09 10:42
       
    
       
  
О, Слава Сникс) привет ^^
 
    
vbCrLf нерационально, т.к. кушает 2 символа) А можно юзать один, например, &H0
А затем слать и слать данные. Как только кусок данных, который, по твоему, должен быть отделен от следующего, заполнил собой буфер (или уже улетел в зависимости от скорости), то посылаешь &H0, как разделитель. И т.д. В каждом блоке первым байтом можно указывать тип данных, можно без длины. Если длина все же большая и нужно индикатором на приеме отображать процесс, то еще 4 байтами посылай размер, а затем данные 
		
	  
			 
	
		 
    
       
    
Номер ответа: 11 
      
Автор ответа:
 Artyom
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Разработчик
Вопросов: 130
Ответов: 6602
      
 Профиль |  | #11
       
Добавлено:  17.02.09 14:53
       
    
       
  
 
    
ну во первых можно пользоваться vbCrLf, а во вторых ты потести а потом скажеш. ПС: вб 6.0 на нете, я хз.  
Ты исходишь из предположения, что в передаваемом сообщении не будет встречаться последовательность vbCrLf. А это может быть не так.
AgentFire, и &h0 тоже может встречаться 
Почему-то все начали заниматься изобретением нерабочих велосипедов 
		
	  
			 
	
		 
    
       
    
Номер ответа: 12 
      
Автор ответа:
 AWР
![]()
ICQ: 345685652 
Вопросов: 38
Ответов: 106
      
 Web-сайт:  
 Профиль |  | #12
      
Добавлено:  18.02.09 16:23
       
    
       
  
Вы непоняли что не так. Короче код
 
    
Dim dataget as string
ws.getdata(dataget)
Как dataget может принять и строку и битмап тип стразу
		
	  
			 
	
		 
    
       
    
Номер ответа: 13 
      
Автор ответа:
 AgentFire
![]()
![]()
![]()
ICQ: 192496851 
Вопросов: 75
Ответов: 3178
      
 Профиль |  | #13
       
Добавлено:  18.02.09 17:28
       
    
       
  
[quote='Brand']AgentFire, и &h0 тоже может встречаться  
    
Это зависит от того, какие данные тебе нужно пересылать. Если это байтовый массив какого-либо файла, то да. А если какой-нибудь чат, то почему бы и нет?
		
	  
			 
	
		 
    
       
    
Номер ответа: 14 
      
Автор ответа:
 Artyom
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Разработчик
Вопросов: 130
Ответов: 6602
      
 Профиль |  | #14
       
Добавлено:  18.02.09 21:31
       
    
       
  
ws - это экземпляр какого класса?
 
    
В строку можно загнать любые данные, и те которые изначально были строкой, и те которые изначально строкой не были.
Тебе по сути на вопрос уже ответили - нужно каким-то образом разделить несколько сообщений.
Как это сделать? Вопрос сложный, и решить его можно разными способами. Начиная от предложенного мною варианта перед отправкой сообщения отправлять его длину. Заканчивая использованием специализированных протоколов типа тех которые реализует WCF. Что именно выбрать - решать тебе.
		
	  
			 
	
		 
    
       
    
Номер ответа: 15 
      
Автор ответа:
 AWР
![]()
ICQ: 345685652 
Вопросов: 38
Ответов: 106
      
 Web-сайт:  
 Профиль |  | #15
      
Добавлено:  19.02.09 21:30
       
    
       
  
Да я знаю как разделить. это легко. Глюкает когда я DataGet'у присваиваю сразу строку и битмап