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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2010, 10:04   #1
Onekey
Пользователь
 
Регистрация: 07.08.2010
Сообщений: 48
По умолчанию Клиент-Сервер на WinSock

Вообщем решил начать потихоньку WinSock и для примера решил попробывать написать клиент-сервер. ( тоесть клиент конектица к серверу) вот что получилось :

СЕРВЕР:
Код:
uses  winsock2;
...
...

var
  Form1: TForm1;
  WSAdata:TWSAdata;
sock:TSOCKET;
addr:TSockAddr;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);


begin
WSAStartup(MAKEWORD(2,0),WSADATA);
sock:=socket(PF_INET,SOCK_STREAM,IPPROTO_IP);
addr.sin_family:=PF_INET;
addr.sin_port:=htons(3311);
addr.sin_addr.S_addr:=INADDR_ANY;
bind(Sock,@addr,sizeof(addr));
Listen(Sock,SOMAXCONN);
if Listen(Sock,SOMAXCONN)<> SOCKET_ERROR then
Label1.Caption:='Началось';

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
WSACleanup;
CloseSocket(Sock);
Label1.Caption:='Закончилось';
end;

end.
Проверел сканером портов. При запуске проги и тыканья на кнопку порт 3311 открыт. Тоесть вроде сервер работает. ( хотя могу и ошибаца)

КЛИЕНТ:
Код:
var
  Form1: TForm1;
  Sock: TSOCKET;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
WSAData:TWSAdata;
Addr:Tsockaddr;
begin
WSAStartUp(MAKEWORD(2,0), WSAData);
Sock:=Socket(PF_INET,SOCK_STREAM, IPPROTO_IP);
addr.sin_family:=PF_INET;
addr.sin_port:=htons(3311);
Addr.sin_addr:=lookupname;
Connect(Sock,@Addr,Sizeof(addr));
if Connect(Sock,@Addr,Sizeof(addr))=SOCKET_ERROR then
Label1.Caption:='Подключиться не удалось'
else
Label1.Caption:='Подключились';

end;

function TForm1.LookupName: TInAddr;
var
HostEnt: PHostEnt;
InAddr: TInAddr;
begin
if Pos('.', Edit1.Text)>0 then
 Inaddr.s_addr := inet_addr(PChar(Edit1.Text))
else
 begin
 HostEnt := gethostbyname(PChar(Edit1.Text));
 FillChar(InAddr, SizeOf(InAddr), 0);
 if HostEnt <> nil then
  begin
   with InAddr, HostEnt^ do
    begin
     S_un_b.s_b1 := h_addr^[0];
     S_un_b.s_b2 := h_addr^[1];
     S_un_b.s_b3 := h_addr^[2];
     S_un_b.s_b4 := h_addr^[3];
    end;
  end
 end;
 Result := InAddr;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
WSACleanUp;
CloseSocket(Sock);
end;

end.


Впринцепи проблема в том что клиент не подключается к серверу! как это исправить?

Пример ниже.
Вложения
Тип файла: zip Пример.zip (404.4 Кб, 79 просмотров)

Последний раз редактировалось Onekey; 21.08.2010 в 10:08.
Onekey вне форума Ответить с цитированием
Старый 21.08.2010, 14:41   #2
Terikon
Форумчанин
 
Регистрация: 22.02.2009
Сообщений: 174
По умолчанию

Если на локал хосте работает а с удалённого нет, то глянь тут, http://www.programmersforum.ru/showthread.php?t=110255 я тоже столкнулся с такой проблемой, тока я на индейцах писал, Квенди пару советов дал
Terikon вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
клиент не получает сообщение(winsock) NiCola999 C/C++ Сетевое программирование 4 21.07.2010 12:08
Клиент-Сервер на WinSock Вишенка Работа с сетью в Delphi 3 24.02.2010 00:45
ftp клиент на winsock sergoss Работа с сетью в Delphi 1 07.05.2009 19:07
Возможно-ли Клиент-серверное приложение типа Клиент(Pascal) а сервер(CGI)? Demol Работа с сетью в Delphi 1 21.04.2009 16:18