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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2011, 14:53   #1
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию winsock

Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,winsock, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
wdata:wsadata;
 
sServerlisten,sclient:tsocket;
 
localaddr, clientaddr:sockaddr_in;
isize:integer;
s1:tctclientthread;//[DCC Error] Unit1.pas(34): E2003 Undeclared identifier: 'tctclientthread'
begin
//загрузка winsock
 
if wsastartup(makeword(2,0),wdata)<>0  then
begin
  messagebox(0,'Не загружається бібліотека winsock'+'error',0);
  exit;
end;
 
sserverlisten:= socket(af_inet, sock_stream,ipproto_ip);
if sserverlisten=invalid_socket then
begin
   messagebox(0,'Помилка створення сокета','error',0);
  exit;
end;
 
if bind(sserverlisten,localaddr,sizeof(localaddr))=socket_error then
begin
  testwinsockerror('bind');//[DCC Error] Unit1.pas(52): E2003 Undeclared identifier: 'testwinsockerror'
  exit;
end;
 
if testfuncerror(listen(sserverlisten,4),'listen') then //[DCC Error] Unit1.pas(52): E2003 Undeclared identifier: 'testfuncerror'
exit;
 
messagebox(0,'server run','respect',0);
while(true) do
begin
  isize:=sizeof(clientaddr);
 
  sclient:= accept(sserverlisten,@clientaddr,@isize);
  if sclient=invalid_socket then
  begin
    testwinsockerror('accept');//
    break;
  end;
 
  s1:=tcpclientthread.create(true);
  s1.sock:=sclient;
  s1.resume;
end;
 
closesocket(sserverlisten);
 
 
 
 
end;
 
end.
//коды ошыбки привел в коментариях.. в чем может быть проблема
Pein95 вне форума Ответить с цитированием
Старый 04.07.2011, 15:22   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> в чем может быть проблема

в том, что выдрав кусок чужого исходника, забыли подключить код/модуль, в котором все эти самописные tctclientthread, testwinsockerror(), testfuncerror() описаны.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 04.07.2011, 15:38   #3
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

дело в том что ето исходник с книги... я нечиге не выдерал все просто переписал... там было сказано что нужно подключить только winsock...
Pein95 вне форума Ответить с цитированием
Старый 04.07.2011, 16:09   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> там было сказано что нужно подключить только winsock

бывает, что и книги врут. Никаких testwinsockerror(), testfuncerror() и тем более класса tctclientthread в модуле winsock никогда не было и не будет. Автор книги, скорее всего, подразумевает, что во все проекты будут подключен его (или не его) чудо-модуль, которые содержит вышеупомянутые функции и классы.

В принципе, без testwinsockerror() и testfuncerror() можно обойсь, это просто функции, проверяющие код возврата на ошибку. А вот класс tctclientthread прийдётся рисовать самому (или найти в книге, где он описан).

Ну или просто взять TClientSocket и TServerSocket и разбираться уже с ними.

А лучше заглянуть в мсдн, и спокойно разобраться с функциями сокетов самостоятельно, ничё особо сложного там нет. Фактически, первая часть исходника (до строки s1:=tcpclientthread.create(true); ) так и делает, а клиентский поток автор создаёт, чтобы работа с созданным блокирующим сокетом не блокировала работу главного потока приложения.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 04.07.2011, 18:33   #5
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

ясно спс))) будем разбиратса)
Pein95 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WinSock Onekey Обсуждение статей 0 20.08.2010 12:04
WinSock ImmortalAlexSan Работа с сетью в Delphi 7 06.06.2010 22:41
WinSock ImmortalAlexSan Работа с сетью в Delphi 1 11.05.2010 14:42
WinSock profi Win Api 8 11.01.2010 21:13
WinSock Killbrum Win Api 1 18.10.2009 15:15