Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сокеты в билдере. Не соответствие с передаваемыми данными. 
:(
    Опции темы
olegrolik
Дата 25.12.2006, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Код до тупого прост...:

int i,rv;
char buf;
RichEdit1->Clear();
Update();
SOCKET socket1;
WSADATA winSockData;
sockaddr_in peer;
char ipaddr[25];
sprintf(ipaddr,"%s",Edit4->Text);
// MessageBox(NULL,ipaddr,"",MB_OK);
unsigned short port;
int result,lis;
WSAStartup(0x0101, &winSockData);

socket1 = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
peer.sin_family = AF_INET;
peer.sin_port = htons(7777); 
peer.sin_addr.s_addr = inet_addr(ipaddr); 
result = connect(socket1, (sockaddr *) &peer, sizeof(peer));
if (result != 0) {
RichEdit1->Lines->Add("Couldn't connect to the server!");;
}
else {
RichEdit1->Lines->Add("Port is open");
}
peer.sin_family = AF_INET;
peer.sin_port = htons(7777);
peer.sin_addr.s_addr = inet_addr("87.242.73.175");
bind(socket1, (sockaddr *) &peer, sizeof(peer)); // не знаю - нужно ли это

RichEdit1->Lines->Add(send(socket1,&buf,4096,0));
// Sleep(10);
RichEdit1->Lines->Add(send(socket1,&buf,4096,0));
RichEdit1->Lines->Add(send(socket1,&buf,4096,0));
RichEdit1->Lines->Add(send(socket1,&buf,4096,0));
RichEdit1->Lines->Add(send(socket1,&buf,4096,0));
RichEdit1->Lines->Add(send(socket1,&buf,4096,0));
WSACleanup();
closesocket(socket1);
}

По идее посылаю по адресу 6 раз 4096 байт. В установке соединения проверяю реально ли отсылается 4096*6 байт. В итоге получается, что есть крупное не соответствие (даже при попытке послать 1 раз 4096 байт посылается то 3116 байт, то около 4200). Более того, не все отсылки работают. Первая - всегда, остальные в случайном порядке. Пробовал использовать Sleep() - не помогает. 
Помогите, пожалуйста, решить проблему. Спасибо  smile
PM MAIL   Вверх
Coder
Дата 26.12.2006, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: нет
Всего: 11



может char buf[4096]; или память выделить?

и еще, как ты инициализируешь buf? в коде не видно что ты отправляешь

bind() нужен.

а вообще смотри в  MSDN: http://msdn.microsoft.com/library/default....socksamples.asp

PM MAIL   Вверх
olegrolik
Дата 26.12.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



buf у меня инициализируется в самом начале
char buf[4096] не решило проблемы...

bind()... он у меня есть...
Только для чего он?

Это сообщение отредактировал(а) olegrolik - 26.12.2006, 11:32
PM MAIL   Вверх
olegrolik
Дата 26.12.2006, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Цитата(Coder @ 26.12.2006,  02:46)
может char buf[4096]; или память выделить?

и еще, как ты инициализируешь buf? в коде не видно что ты отправляешь

bind() нужен.

а вообще смотри в  MSDN: http://msdn.microsoft.com/library/default....socksamples.asp

Что такое MSDN? 
Кстати, проблема решается после того, как я уменьшаю размер буфера до 1024, например.
PM MAIL   Вверх
Vyacheslav
Дата 26.12.2006, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



А кто, кстати, обещал, что за один раз отправиться ровно столько, сколько хочется ? smile
Цитата


int send(
  SOCKET s,
  const char* buf,
  int len,
  int flags
);


Return Values
If no error occurs, send returns the total number of bytes sent, which can be less than the number indicated by len. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling 

The successful completion of a send does not indicate that the data was successfully delivered.

If no buffer space is available within the transport system to hold the data to be transmitted, send will block unless the socket has been placed in nonblocking mode. On nonblocking stream oriented sockets, the number of bytes written can be between 1 and the requested length, depending on buffer availability on both client and server computers. The select, WSAAsyncSelect or WSAEventSelect functions can be used to determine when it is possible to send more data.




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
olegrolik
Дата 26.12.2006, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Ничего себе... Ну тогда подскажите, пожалуйста, как послать и получить точное кол-во информации...  smile 
PM MAIL   Вверх
witex
Дата 27.12.2006, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 16.10.2006
Где: Эстония

Репутация: 1
Всего: 4



Цитата

socket1 = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
честно, а мне банально эта срока раздражает!
--------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.2445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.