Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2011, 21:30   #1
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию Winsock - создание клиента

Добрый вечер. Я приступил к изучению WinSock. Все вроде бы правильно написал, но выбивает ошибку несоответствия типов. Гуглил, находил коды, но у коллег не в этом ошибка, следовательно, эта строка не должна быть ошибочной.
Код:
var
Server:TInAddr;
inf:TWSADATA;
sock:integer;
Sockaddr:TsockAddr;
begin
   Server.s_addr:=inet_addr(PChar('127.0.0.1')); // вот в этой строке ошибка
   WSAStartup(MAKEWORD(2,0),inf);
   sock:=Socket(AF_INET,SOCK_STREAM,0);
   Sockaddr.sin_family:=AF_INET;
   Sockaddr.sin_port:=htons(21);
   Sockaddr.Sin_addr:=Server;
   bind(sock,sockaddr,SizeOf(SockAddr));
   listen(sock,3);
end;
Выбивает [DCC Error] Unit1.pas(32): E2010 Incompatible types: 'Char' and 'AnsiChar' Я в полном недоумении. Дошло дело до того, что Pchar() на AnsiChar() менял(получилось [DCC Error] Unit1.pas(32): E2089 Invalid typecast).
Заранее благодарен.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 29.10.2011, 14:14   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну в принципе, для строковой константы не нужно приведение типов.
ну а так, вам нужен PAnsiChar, типы то не посмотреть чтоль?
в итоге потом если через string придеться задавать приведение типов PAnsiChar(AnsiString(Edit1.Text))
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.10.2011, 16:48   #3
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Цитата:
ну в принципе, для строковой константы не нужно приведение типов.
Спасибо все получилось. Я тут вот что подумал. Статья посвящена WinSock2, а я использую первую библиотеку. Возможно функции изменились? В основном все проблемы в приведении типов. Вот что опять у меня произошло.
Код:
var
inf:TWSADATA;
sock:integer;
Sockaddr:TsockAddr;
i:integer;
begin

   WSAStartup(MAKEWORD(1,0),inf);
   sock:=Socket(AF_INET,SOCK_STREAM,0);
   Sockaddr.sin_family:=AF_INET;
   Sockaddr.sin_port:=htons(21);
   Sockaddr.Sin_addr.S_addr:=htonl(INADDR_ANY);
   bind(sock,sockaddr,SizeOf(SockAddr));
   listen(sock,3);
   i:=Sizeof(SockAddr);
   accept(Sock,sockaddr,i)// Тут ошибка. В sockaddr;
Вот что выбивает: [DCC Error] Unit1.pas(41): E2010 Incompatible types: 'PSOCKADDR' and 'sockaddr_in'. PSOCKADDR - это вообще что за тип?
Спасибо.
p.s вот статья по которой я учусь.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 29.10.2011 в 16:51.
_PROGRAMM_ вне форума Ответить с цитированием
Старый 29.10.2011, 17:10   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
PSOCKADDR - это вообще что за тип?
ну судя по принятому именованию типов в Д, это указатель на TSOCKADDR
Код:
 accept(Sock,@sockaddr,i)
попробуйте так.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.10.2011, 17:18   #5
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Цитата:
ну судя по принятому именованию типов в Д, это указатель на TSOCKADDR
Я тоже так подумал, поменял и получил: [DCC Error] Unit1.pas(41): E2010 Incompatible types: 'PInteger' and 'Integer'. Сейчас даже перепроверил.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 29.10.2011, 17:22   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Судя по справке там тоже адрес
Код:
accept(Sock,@sockaddr,@i):
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 29.10.2011, 17:28   #7
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Цитата:
Судя по справке там тоже адрес
Спасибо вам.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить IP подключившегося клиента(WinSock и сокеты) Karp_13 C/C++ Сетевое программирование 2 09.10.2011 13:07
WinSock и насильственное убийство клиента/сервера Ksardas13 C/C++ Сетевое программирование 3 23.04.2011 08:14
Создание клиента для браузерки Follower Помощь студентам 2 18.11.2009 19:44
Создание ICQ клиента S@fer Работа с сетью в Delphi 12 28.07.2009 08:52
Создание клиента и интерфейса AlexMod Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 24.01.2009 20:07