Работа с винсокетами.
Модератор: Дед Пахом
					Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
	При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- 
				Гость
 
- StillZero
 - Ветеран
 - Сообщения: 460
 - Зарегистрирован: 06 Июль 2005, 2:17
 - Откуда: Хабаровск
 - Благодарил (а): 1 раз
 - Поблагодарили: 1 раз
 - Контактная информация:
 
1. символ 0 для CSTRING означает конец строки - ну это в курсе наверное
2. а принимаешь чем recvfrom()? длина мессаги = 0?
3. а обрабатываешь прием в цикле? или один раз делаешь recvfrom? надо в цикле
3. как вариант: кодируй его другим знаком, вернее последовательностью знаков, например "\\+", перед отправкой и декодирую обратно при приеме
Написал: PAA(27)
			
			
									
						2. а принимаешь чем recvfrom()? длина мессаги = 0?
3. а обрабатываешь прием в цикле? или один раз делаешь recvfrom? надо в цикле
3. как вариант: кодируй его другим знаком, вернее последовательностью знаков, например "\\+", перед отправкой и декодирую обратно при приеме
Написал: PAA(27)
- 
				Гость
 
- StillZero
 - Ветеран
 - Сообщения: 460
 - Зарегистрирован: 06 Июль 2005, 2:17
 - Откуда: Хабаровск
 - Благодарил (а): 1 раз
 - Поблагодарили: 1 раз
 - Контактная информация:
 
....не пробовал правда, но я думаю получится
Написал: PAA(27)
			
			
									
						Код: Выделить всё
DataString  STRING(нужный размер)        ! строка данных
cstrData     CSTRING(нужный размер+1) ! отсылаемая строка
 code
 DataString='bla bla...<0>...bla bla'
 Len#=len(clip(DataString)) ! надо подумать насчет последнего символа <0>
! а вместо присвоения cstrData=DataString
 memcpy(address(cstrData), address(DataString),Len#)  
 Err#=send(tcpSocket,address(cstrData),Len#,0) ! ну тут суть только
- 
				Гость
 
- 
				Гость
 
Что-то вы, ребята, мудрите без меры 
гораздо проще нужно быть - просто наполнять CSTRING как байтовый массив, интерпретировать как байтовый массив и при работе не пользоватся функциями работы со строками (всякие CLIP и LEN).
Подготовили перед вызовом байтовый массив, хранящийся в переменной типа CSTRING (как того требует прототип API-функции), передали ее и количество байт в массиве (а не длину!!!) и вызывали API
			
			
									
						гораздо проще нужно быть - просто наполнять CSTRING как байтовый массив, интерпретировать как байтовый массив и при работе не пользоватся функциями работы со строками (всякие CLIP и LEN).
Подготовили перед вызовом байтовый массив, хранящийся в переменной типа CSTRING (как того требует прототип API-функции), передали ее и количество байт в массиве (а не длину!!!) и вызывали API
- 
				Гость
 
Да что ж тут писать?
вот модификация:
в мапе:
s32_send(SOCKET,*CSTRING,SHORT,SHORT),SHORT,RAW,PASCAL,NAME('SEND'),DLL(dll_mode)
cstrData CSTRING(1024) ! отсылаемая строка
Len SHORT
 
code
cstrData='aaaa<0>bbbb'
Len = 9
! т.е. пересылаем 9 байт
UNLOCKTHREAD
Err#=s32_send(tcpSocket,address(cstrData),Len,0)
LOCKTHREAD
IF Err# <> Len
имеем проблемы с отправкой
END
			
			
									
						вот модификация:
в мапе:
s32_send(SOCKET,*CSTRING,SHORT,SHORT),SHORT,RAW,PASCAL,NAME('SEND'),DLL(dll_mode)
cstrData CSTRING(1024) ! отсылаемая строка
Len SHORT
code
cstrData='aaaa<0>bbbb'
Len = 9
! т.е. пересылаем 9 байт
UNLOCKTHREAD
Err#=s32_send(tcpSocket,address(cstrData),Len,0)
LOCKTHREAD
IF Err# <> Len
имеем проблемы с отправкой
END
