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();
}
Проблемма с СОКЕТАМИ в Билдере.
Немогу соедениться с сервером через сокеты.
При работе скомпилированного рпиложения иззи этого участка кода постояно вылазят Access violation in adress...
Пожалуйста укажите ошибки допущенные мной.
П.С.
Не судите слишком строго я только учусь :)
Код:
строчку WSACleanup(); в другую часть оператора IF перенеси
Код:
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);
}
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);
имхо строка
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();
}
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();
}
Код:
sockaddr_in sin;
исправь на
Код:
struct sockaddr_in sin;
Код:
connect(Sock, (sockaddr*)&sin, sizeof(sin))
исправь на
Код:
connect(Sock, (struct sockaddr *)&sin, sizeof(struct sockaddr))
вроде так... или х.з. :)
Код:
Sock = socket(AF_INET, SOCK_STREAM, 0);
почти полностью аналогична строке из твоего
Код:
csock = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
machgun твое предлжение в изменении кода совсем ничего не меняет :) ну на сколько я это вижу по коду. Так как код от этого принципиально не меняется.
Тему закрываю. Так как определил что причина в другой части программы.