Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблемма с СОКЕТАМИ в Билдере.

20K
04 января 2009 года
_Taurus_
24 / / 30.08.2007
Помогите пожалуйстм разобраться с возникнувщей проблеммой!
Немогу соедениться с сервером через сокеты.
При работе скомпилированного рпиложения иззи этого участка кода постояно вылазят Access violation in adress...
Пожалуйста укажите ошибки допущенные мной.
П.С.
Не судите слишком строго я только учусь :)
Код:
WSAData WSADat;
sockaddr_in sin;
SOCKET Sock;
WSAStartup(0x0202, &WSADat);
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = inet_addr(host);
sin.sin_port = htons(StrToInt(port));
Sock = socket(AF_INET, SOCK_STREAM, 0);
if (connect(Sock, (sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR)
{
 throw Exception("No access to the server or Server is down.");
}
else
{
send(Sock,packet,strlen(packet)+1,0);
WSACleanup();
}
25K
04 января 2009 года
San_
42 / / 03.10.2007
строчку WSACleanup(); в другую часть оператора IF перенеси
20K
04 января 2009 года
_Taurus_
24 / / 30.08.2007
Переместил...Особых изменений это не принесло
Код:
WSAData WSADat;
sockaddr_in sin;
SOCKET Sock;
WSAStartup(0x0202, &WSADat);
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = inet_addr(host);
sin.sin_port = htons(StrToInt(port));
Sock = socket(AF_INET, SOCK_STREAM, 0);
if (connect(Sock, (sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR)
{
WSACleanup();
 throw Exception("No access to the server or Server is down.");
}
else
{
send(Sock,packet,strlen(packet)+1,0);
closesocket(Sock);
}


а и еще добавил закрытие сокета
 
Код:
closesocket(Sock);
25K
04 января 2009 года
San_
42 / / 03.10.2007
давно я этим не занимался , сравнил со своей лабой
имхо строка
Sock = socket(AF_INET, SOCK_STREAM, 0); явно лишняя
у меня соединение с сервером выглядело примерно так
Код:
WSADATA wsadata;
 SOCKET  csock;
 SOCKADDR_IN saddr;


  char adr[] = "127.0.0.1\0";
   csock = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
   saddr.sin_family = AF_INET;
   saddr.sin_port = htons(SERV_PORT);  //порт
   saddr.sin_addr.S_un.S_addr = inet_addr(adr);
   int rc=connect(csock,(sockaddr*)&saddr,sizeof(saddr));

   if (rc==SOCKET_ERROR)
    { ShowMessage("connect erro!");
      Application->Terminate();
    }
42K
04 января 2009 года
machgun
25 / / 02.01.2009
 
Код:
sockaddr_in sin;

исправь на
 
Код:
struct sockaddr_in sin;


 
Код:
connect(Sock, (sockaddr*)&sin, sizeof(sin))

исправь на
 
Код:
connect(Sock, (struct sockaddr *)&sin, sizeof(struct sockaddr))


вроде так... или х.з. :)
20K
04 января 2009 года
_Taurus_
24 / / 30.08.2007
Sun_ посмотри внимательно на свой код. Строка из моего кода
 
Код:
Sock = socket(AF_INET, SOCK_STREAM, 0);

почти полностью аналогична строке из твоего
 
Код:
csock = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);



machgun твое предлжение в изменении кода совсем ничего не меняет :) ну на сколько я это вижу по коду. Так как код от этого принципиально не меняется.
20K
04 января 2009 года
_Taurus_
24 / / 30.08.2007
Тему закрываю. Так как определил что причина в другой части программы.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог