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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2010, 00:25   #1
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию Интернет чат

Доброго времени суток! Есть клиент, есть сервер.
Код клиента:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Sockets, ScktComp;


type
  TForm1 = class(TForm)
    Button1: TButton;
    ClientSocket1: TClientSocket;
    Button2: TButton;
    ListBox1: TListBox;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  A: String;

implementation

{$R *.dfm}

function GetComputerNetName: string;
var
  buffer: array[0..255] of char;
  size: dword;
begin
  size := 256;
  if GetComputerName(buffer, size) then
    Result := buffer
  else
    Result := ''
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Port:=11243;//ClientSocket1.Port:=5983;
ClientSocket1.Address:='188.113.43.173.255';
ClientSocket1.Active:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ClientSocket1.Socket.SendText(Memo1.Lines.Text);
ListBox1.Items.Add(A+': '+Memo1.Lines.Text);
Memo1.Lines.Text:='';
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
Socket.SendText('Привет!');
ListBox1.Items.Add(A+': Привет!');
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
ListBox1.Items.Add('Сервер: '+Socket.ReceiveText);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
A:=GetComputerNetName;
end;

end.
Код сервера:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Sockets, ScktComp, StdCtrls;

type
  TForm1 = class(TForm)
    ServerSocket1: TServerSocket;
    ListBox1: TListBox;
    Memo1: TMemo;
    Button1: TButton;
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure Button1Click(Sender: TObject);
    procedure Memo1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  A: string;

implementation

{$R *.dfm}

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
If Socket.RemoteAddress='10.22.160.208' then A:='Comp-Alexa';
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
Var S:string;
begin
S:=A + ': ' + Socket.ReceiveText;
ListBox1.Items.Add(S);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket1.Socket.Connections[0].SendText(Memo1.Lines.Text);
ListBox1.Items.Add('Сервер: '+Memo1.Lines.Text);
Memo1.Lines.Text:='';
end;
У сервера такой порт как и у клиента, и сервер активен. Клиент-сервер работает прекрасно в локальной сети!!! Но при попытке коннект к серву через интернет венчается венчается ошибкой Asynchronous socket error 10061. Что это за ошибка я впринципе понял, но что изменить в коде, чтобы её не было не знаю. пробывал после IP добавлять ".255", но тогда появляласт ошибка 10053. Помогите пожалуйста.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 23.02.2010, 11:02   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...где вы в интернете видели 10.22.160.208 такие адреса ? ...а это 188.113.43.173.255 что за мега-конструкция ?

...файрволлы отключены? ...адреса ваши прямые? порты другие пробовали... ip 188.113.43.173 пингуется с другой машины?

upd
-------

проверил пинг с http://rassanov.ru/web-tools/ping-IP-domain.htm на 188.113.43.173 по порту 11243... по udp,tcp проходит, icmp нет... теперь проверьте вторую сторону.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 23.02.2010 в 11:08.
raxp вне форума Ответить с цитированием
Старый 23.02.2010, 14:59   #3
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

10.22.160.208 этот адрес, ни на что не влияет, просто от кого пришло сообщение, отображаться не будет (это локальный адрес моей машины), программа работала сначала в сети. 94.232.12.26 - вот это мой IP в интернете, по вашему сайту он не пингуется вообще по порту 11243, а IP 188.113.43.173 пнгуется замечательно. Что мне дальше делать? Файрвол на компе с сервером вырублен, может это из-за провайдера?
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 23.02.2010 в 15:04.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 23.02.2010, 15:18   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...не ответили, из каких соображений 255 добавили
Цитата:
...не пингуется вообще
потому нет и связи.
Цитата:
...Файрвол на компе с сервером вырублен
а вот тут поподробнее про структуру вашей сети и выхода в инет... случаем не через прокси-сервер или роутер?


upd
-------

ну так и думал, вы за nat NAT-10.kursk.puzzle.su, проброс портов решит вашу проблему, если вы имеете доступ к его настройкам.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 23.02.2010 в 15:24.
raxp вне форума Ответить с цитированием
Старый 23.02.2010, 15:41   #5
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Читал тему какую-то, где дописывали 255 вот и добвил так пальцем в небо :-) Инэт у меня предоставляет провайдер Puzzle Курск =) Это всё что знаю=)
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 23.02.2010, 15:41   #6
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Как вы узнали моего провайдера?=) И что такое проброс портов и доступ через кого получить?
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 23.02.2010 в 16:59.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 23.02.2010, 15:57   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...вы же ip дали
...т.к. вы не ответили как выходите в инет, то посему совет ниже может не иметь смысла... только телепатия
...ну допустим, такая версия, у вас есть выделенный внешний ip и линия от прова, к которому подключен роутер, за ним уже локальная сеть из нескольких машин с внутренними адресами типа 10.22.160.2-255... так вот в роутере (10.22.160.1) нужно сделать ремаппинг-проброс портов (открыть порты) на определенную машину в локалке... пример см. скрин ниже


upd
-------

Цитата:
А можно как-нибудь залить изображение не такое маленькое
перезалил... когда бум отвечать о структуре сети?
Изображения
Тип файла: jpg Копировать из новый-2.jpg (62.6 Кб, 153 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 23.02.2010 в 23:49.
raxp вне форума Ответить с цитированием
Старый 23.02.2010, 16:56   #8
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

А можно как-нибудь залить изображение не такое маленькое? А то не видно ничего.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 23.02.2010, 16:57   #9
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Либо какой-то обрыв, либо нет проги прослушивающий порт на другом компе, или скорее всего FireWallвыключите на подключаемых компах
ADD:
Кстати, в делфи есть готовый пример
\Borland\Delphi7\Demos\Internet\Net Chat
xor eax, eax
xchg [eax], eax

Последний раз редактировалось MalCer; 23.02.2010 в 17:20.
MalCer вне форума Ответить с цитированием
Старый 23.02.2010, 16:59   #10
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Я ушел, когда буду отпишусь.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как написать Голосовой чат, через интернет. visual basic 2005 Serotonin Помощь студентам 1 08.09.2009 01:05
Интернет чат Arxangelname Работа с сетью в Delphi 4 30.08.2009 14:50
Чат по сети интернет delphin100 Работа с сетью в Delphi 32 07.04.2009 06:42
Интернет чат dani92 Работа с сетью в Delphi 1 01.04.2009 10:56
интернет чат MyQwErTy Помощь студентам 3 07.02.2009 06:57