Привет, Гость ^__^
Регистрация
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11
  1. #1
    Аватар для STREAM-LIFES
    Статус
         Offline
    Регистрация
    14.07.2015
    Сообщений
      450
    Поблагодарил(а)
    8
    Благодарностей
    90
    Репутация
    0 +/-

    Post Нужна помощь от программистов

    Привет программеры! У меня к вам есть вопросы. Я вчера сделал Сервер для чата и сам клиент чата.Проблема в том что к этому серверу подключиться получается только мне. Он работает по типу загруски настроек тоесть(IP,PORT) Потом написание своего ника для чата. И потом уже общение. Как вот сделать чтобы с других компьютеров(IP) Могли к нему подключаться. Я тестил когда у себя на компе. Более 3-х людей так сказать создал и сообщения обменивались хорошо!Помогите с моей проблемой. Ну а потом конечно же приглошаю всех вас в мой чат !



  2. #2
    Аватар для STREAM-LIFES
    Статус
         Offline
    Регистрация
    14.07.2015
    Сообщений
      450
    Поблагодарил(а)
    8
    Благодарностей
    90
    Репутация
    0 +/-
    Ах да. Забыл написать Чат сделан на : (c#) А сервер на c++

  3. #3
    Аватар для STREAM-LIFES
    Статус
         Offline
    Регистрация
    14.07.2015
    Сообщений
      450
    Поблагодарил(а)
    8
    Благодарностей
    90
    Репутация
    0 +/-
    Так кто поможет?

  4. #4
    Banned
    Аватар для -_-Mistik-_-
    Статус
         Offline
    Регистрация
    05.08.2015
    Сообщений
      75
    Поблагодарил(а)
    30
    Благодарностей
    93
    Репутация
    0 +/-
    Создать чат не так и трудно. Пару примеров дам. Ну а если не понятно пиши в лс.
    1.Создаешь сервер. Прописываешь ip и все остальное.
    2.Создаешь отдельный клиент и внего прописываешь сервер. Ну а еще проще в сервере указать номера любой номер. затем прописать его в клиент.
    И будет все совместно работать.
    3.Готовый клиент залей на нужный фо яндекс диск. и кинь кому не будь.
    Все прекрасно будет работать.
    если че пиши в лс

  5. 2 пользователей сказали cпасибо -_-Mistik-_- за это полезное сообщение:

    alexmesyre (27.08.2015),Asking Alexandria (25.08.2015)

  6. #5
    Аватар для ►MIDNITE◄
    Статус
         Offline
    Регистрация
    18.08.2015
    Сообщений
      24
    Поблагодарил(а)
    0
    Благодарностей
    4
    Репутация
    0 +/-
    лушче юзай чатовод если начинающий...подключай его как браузер в шарп свой

  7. #6
    Аватар для STREAM-LIFES
    Статус
         Offline
    Регистрация
    14.07.2015
    Сообщений
      450
    Поблагодарил(а)
    8
    Благодарностей
    90
    Репутация
    0 +/-
    Цитата Сообщение от ►MIDNITE◄ Посмотреть сообщение
    лушче юзай чатовод если начинающий...подключай его как браузер в шарп свой
    Ну я не совсем начинающий. Много разных плюх могу делать. Например читы могу делать

  8. #7
    Аватар для STREAM-LIFES
    Статус
         Offline
    Регистрация
    14.07.2015
    Сообщений
      450
    Поблагодарил(а)
    8
    Благодарностей
    90
    Репутация
    0 +/-
    Цитата Сообщение от ►MIDNITE◄ Посмотреть сообщение
    лушче юзай чатовод если начинающий...подключай его как браузер в шарп свой
    А этот чатавод для меня не интересен... Это всё не интересная ерунда. Тем более этот чат который я писал лучше будет.Мне нужен правдо дедик....

  9. #8
    Аватар для arma1986
    Статус
         Offline
    Регистрация
    12.08.2015
    Сообщений
      2
    Поблагодарил(а)
    0
    Благодарностей
    0
    Репутация
    0 +/-
    ребят помогите мне пожалуйста у меня читы не работают даже платные захожу в игру запускаю чит а меню не поевляется

  10. #9
    Аватар для STREAM-LIFES
    Статус
         Offline
    Регистрация
    14.07.2015
    Сообщений
      450
    Поблагодарил(а)
    8
    Благодарностей
    90
    Репутация
    0 +/-
    Цитата Сообщение от arma1986 Посмотреть сообщение
    ребят помогите мне пожалуйста у меня читы не работают даже платные захожу в игру запускаю чит а меню не поевляется
    Во первых скачай дополнительные бибиотеки длл. Для роботоспособности чита! Во вторых не спамь в темах не по теме разговора.

  11. #10
    Аватар для By.Cheater
    Статус
         Offline
    Регистрация
    13.05.2015
    Сообщений
      6
    Поблагодарил(а)
    3
    Благодарностей
    0
    Репутация
    0 +/-
    Рассмотрим довольно простой пример чата для локальной сети. В этом примере два приложения - чат-сервер и чат-клиент. Чат-клиенты подключаются к чат-серверу и через него обмениваются сообщениями. Чат-сервер может быть запущен и на том компьютере, где запущен один из клиентов. Кроме того, для тестирования Вы можете запустить на своем компьютере сразу чат-сервер и несколько чат-клиентов. Для этого нужно указать localhost в поле Host, а в поле Port у сервера и у клиента должны быть одинаковые значения. Не путайте сервер в понимании программы, принимающей вызовы клиентов, с компьютером-сервером! То же самое и с клиентом.

    Исходники обоих приложений (чат-сервера и чат-клиента) Вы можете скачать, нажав здесь. Этот пример сделан на Borland Delphi 5. Однако, код будет работать в любой версии Дельфи, где есть компоненты TServerSocket и TClientSocket. В более ранних версиях возможны проблемы с открытием форм, но их легко сделать самому, т.к. здесь приведены скриншоты этих примеров.

    Чтобы посмотреть данный пример, скачайте его исходники, откомпилируйте оба проекта, запустите srv_ex.exe, в его окне нажмите кнопку Start. В появившемся окне запроса нужно указать порт, на котором будет работать сервер. Значение по умолчанию - 1001.

    Затем запустите chat_ex.exe (чат-клиент). Откроется главное окно, в котором нужно нажать кнопку Connect, а затем - ввести необходимые параметры:

    * Host - нужно ввести адрес сервера, с которым нужно установить соединение. Если сервер запущен на том же компьютере, что и клиент, то введите в это поле - localhost
    * Port - нужно ввести порт сервера, с которым нужно установить соединение. Порт сервера и клиента должен совпадать и желательно не должен быть меньше тысячи, т.к. порты в этом диапазоне могут использоваться системой. Значение по-умолчанию - 1001
    * Nickname - нужно ввести свой ник (псевдоним) для отображения в списке пользователей.

    Ну а теперь разберем исходный код чат-сервера:

    1 {Запуск сервера}
    2 procedure TForm1.Button1Click(Sender: TObject);
    3 var s: string;
    4 begin
    5 {Запрашиваем порт}
    6 s := InputBox('Start chat server','Enter port:','1001');
    7 if s = '' then
    8 Exit;
    9 {Чистим юзер лист}
    10 ListBox1.Items.Clear;
    11 {Устанавливаем порт}
    12 ServerSocket1.Port := StrToInt(s);
    13 {Запускаем сервер}
    14 ServerSocket1.Open;
    15 end;
    16
    17 procedure TForm1.Button2Click(Sender: TObject);
    18 begin
    19 {Чистим юзер лист и останавливаем сервер}
    20 ListBox1.Items.Clear;
    21 if ServerSocket1.Active then
    22 ServerSocket1.Close;
    23 end;
    24
    25 procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
    26 Socket: TCustomWinSocket);
    27 var s: string;
    28 i: Integer;
    29 begin
    30 {сохраняем в s присланную нам строку}
    31 s := Socket.ReceiveText;
    32 {Если кто-то прислал нам свое имя}
    33 if Copy(s,1,2) = '#N' then begin
    34 Delete(s,1,2);
    35 {Добавляем его в юзер лист}
    36 ListBox1.Items.Add(s);
    37 {Записываем в s команду для посылки нового списка юзеров}
    38 s := '#U';
    39 for i := 0 to ListBox1.Items.Count-1 do
    40 s := s+ListBox1.Items[i]+';';
    41 {...и рассылаем этот список всем клиентам}
    42 for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
    43 ServerSocket1.Socket.Connections[i].SendText(s);
    44 Exit;
    45 end;
    46 {Если кто-то кинул сообщение - рассылаем его всем клиентам}
    47 if (Copy(s,1,2) = '#M')or(Copy(s,1,2) = '#P') then begin
    48 for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
    49 ServerSocket1.Socket.Connections[i].SendText(s);
    50 Exit;
    51 end;
    52 end;
    53
    54 procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
    55 Socket: TCustomWinSocket);
    56 var i: Integer;
    57 begin
    58 {Кто-то присоединился или отсоединился? Нет проблем!
    59 Запрашиваем у всех юзеров их имена}
    60 ListBox1.Items.Clear;
    61 for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
    62 ServerSocket1.Socket.Connections[i].SendText('#N');
    63 end;


    Итак, что же делает данный код? Button1Click и Button2Click - думаю, понятно, что они запускают и останавливают сервер соответственно. Дополнительного рассмотрения требует ServerSocket1ClientRead.

    ServerSocket1ClientRead - обработчик события OnClientRead компонента TServerSocket. Первая строка - сохраняем полученные из сокета данные в s. Далее, функция Copy(s,1,2) возвращает первые два символа строки s, которые затем проверяются на соответствие с условно-введенной нами командой "#N", которая означает, что в строке s после самой команды содержится присланное кем-либо из клиентов имя (ник - псевдоним). Это имя затем добавляется в ListBox1. Таким образом ListBox1 становится списком подключенных клиентов.

    Далее, в строку s (информация в которой уже не нужна) записываем команду "#U" и последовательно всех юзеров из списка ListBox1. Затем всю эту строку рассылаем ВСЕМ клиентам.

    Затем, если мы получили не "#N", а "#M" или "#P" (простое или приватное сообщение) - рассылаем его всем клиентам (а они уже разберуться, кому это сообщение :-) ).

    ServerSocket1ClientDisconnect - обработчик события, возникающего когда кто-либо из клиентов отсоединился от сервера. Здесь мы очищаем список юзеров и посылаем всем клиентам запросы на получение их ников (псевдонимов).

    ПРИМЕЧАНИЕ: Данный пример максимально упрощен, чтобы просто была понятна технология создания подобных приложений. Возможности нормального чата должны быть намного шире. Также имейте в виду, что команды типа "#N", "#U", "#M", и т.д. вводятся самим разработчиком просто чтобы определить, что прислали из сокета. Эти команды никак не привязаны непостредственно к сокетам.

    Далее приведем исходный текст чат-клиента с необходимыми пояснениями:


    1 ...
    2 {Здесь определение формы TForm1}
    3
    4 var
    5 Form1: TForm1;
    6 nickname: string; {Ник (псевдоним)}
    7
    8 implementation
    9
    10 uses conn; {Юнит с диалогом установки соединения}
    11
    12 {$R *.DFM}
    13
    14 procedure TForm1.Button2Click(Sender: TObject);
    15 var do_connect: Boolean;
    16 host,port: string;
    17 begin
    18 {Показываем окно установки соединения с сервером}
    19 Form2 := TForm2.Create(Application);
    20 {do_connect = True, если была нажата кнопка Connect}
    21 do_connect := (Form2.ShowModal = mrOk);
    22 {заполнение переменных до того, как мы уничтожим форму}
    23 host := Form2.Edit1.Text;
    24 port := Form2.Edit2.Text;
    25 nickname := Form2.Edit3.Text;
    26 {Уничтожаем форму}
    27 Form2.Free;
    28 {Если была нажата кнопка Cancel, то уходим отсюда}
    29 if not do_connect then
    30 Exit;
    31 {Если соединение уже установлено, то обрываем его}
    32 if ClientSocket1.Active then
    33 ClientSocket1.Close;
    34 {Устанавливаем свойства Host и Port}
    35 ClientSocket1.Host := host;
    36 ClientSocket1.Port := StrToInt(port);
    37 {Пытаемся соединиться}
    38 ClientSocket1.Open;
    39 end;
    40
    41 procedure TForm1.Button3Click(Sender: TObject);
    42 begin
    43 {Закрываем соединение (если оно установлено)}
    44 if ClientSocket1.Active then
    45 ClientSocket1.Close;
    46 end;
    47
    48 procedure TForm1.ClientSocket1Error(Sender: TObject;
    49 Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
    50 var ErrorCode: Integer);
    51 begin
    52 {Если произошла ошибка, выводим ее код в Memo1}
    53 {Insert вставляет строку в указанную позицию (в данном случае
    54 - 0 - в начало)}
    55 Memo1.Lines.Insert(0,'Socket error ('+IntToStr(ErrorCode)+')');
    53 end;
    57
    58 procedure TForm1.ClientSocket1Lookup(Sender: TObject;
    59 Socket: TCustomWinSocket);
    60 begin
    61 {Сообщаем о том, что идет поиск хоста}
    62 Memo1.Lines.Insert(0,'Looking up for server...');
    63 end;
    64
    65 procedure TForm1.ClientSocket1Connecting(Sender: TObject;
    66 Socket: TCustomWinSocket);
    67 begin
    68 {соединяемся...}
    69 Memo1.Lines.Insert(0,'connecting...');
    70 end;
    71
    72 procedure TForm1.ClientSocket1Connect(Sender: TObject;
    73 Socket: TCustomWinSocket);
    74 begin
    75 {соединились!}
    76 Memo1.Lines.Insert(0,'connected!');
    77 end;
    78
    79 procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
    80 Socket: TCustomWinSocket);
    81 begin
    82 {отсоединились :(}
    83 Memo1.Lines.Insert(0,'disconnected');
    84 end;
    85
    86 procedure TForm1.ClientSocket1Read(Sender: TObject;
    87 Socket: TCustomWinSocket);
    88 var s,from_,to_: string;
    89 begin
    90 {присваиваем s полученную от сервера строку}
    91 s := Socket.ReceiveText;
    92 {Если сервер посылает нам User List}
    93 if Copy(s,1,2) = '#U' then begin
    94 Delete(s,1,2);
    95 {Чистим ListBox1}
    96 ListBox1.Items.Clear;
    97 {Добавляем по одному юзеру в список. Имена юзеров
    98 разделены знаком ";"}
    99 while Pos(';',s) > 0 do begin
    100 ListBox1.Items.Add(Copy(s,1,Pos(';',s)-1));
    101 Delete(s,1,Pos(';',s));
    102 end;
    103 Exit;
    104 end;
    105 {Если нам прислали общее сообщение (видимое для всех юзеров)}
    106 if Copy(s,1,2) = '#M' then begin
    107 Delete(s,1,2);
    108 {Добавляем его в Memo1}
    109 Memo1.Lines.Insert(0,Copy(s,1,Pos(';',s)-1)+'> '+
    110 Copy(s,Pos(';',s)+1,Length(s)-Pos(';',s)));
    111 Exit;
    112 end;
    113 {Если нам прислали запрос на наше имя юзера}
    114 if Copy(s,1,2) = '#N' then begin
    115 {Посылаем ответ}
    116 Socket.SendText('#N'+nickname);
    117 Exit;
    118 end;
    119 {Если нам прислали приватное сообщение (или не нам :) )}
    120 if Copy(s,1,2) = '#P' then begin
    121 Delete(s,1,2);
    122 {Выделяем в to_ - кому оно предназначено}
    123 to_ := Copy(s,1,Pos(';',s)-1);
    124 Delete(s,1,Pos(';',s));
    125 {Выделяем в from_ - кем отправлено}
    126 from_ := Copy(s,1,Pos(';',s)-1);
    127 Delete(s,1,Pos(';',s));
    128 {Если оно для нас, или написано нами - добавляем в Memo1
    129 (иногда полезно убрать этот оператор if :) )}
    130 if (to_ = nickname)or(from_ = nickname) then
    131 Memo1.Lines.Insert(0,from_+' (private) > '+s);
    132 Exit;
    133 end;
    134 end;
    135
    136 procedure TForm1.Button1Click(Sender: TObject);
    137 var s: string;
    138 begin
    139 {Если мы хотим послать приватное сообщение, но не выбрали адресата -
    140 нас покарают замечанием :) и выгонят из обработчика}
    141 if (CheckBox1.Checked)and(ListBox1.ItemIndex < 0) then begin
    142 ShowMessage('At first you should select the user in the User List!');
    143 Exit;
    144 end;
    145 {Если это приватное сообщение}
    146 if CheckBox1.Checked then
    147 s := '#P'+ListBox1.Items[ListBox1.ItemIndex]+';' {добавляем
    148 спец.команду и адресат}
    149 else {А если не очень приватное?}
    150 s := '#M'; {Просто спец.команду}
    151 {Добавляем наше имя (от кого) и само сообщение}
    152 s := s+nickname+';'+Edit1.Text;
    153 {Посылаем все это добро по сокету}
    154 ClientSocket1.Socket.SendText(s);
    155 {И снова ждем ввода в уже чистом TEdit-е}
    156 Edit1.Text := '';
    157 ActiveControl := Edit1;
    158 end;
    159
    160 procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
    161 Shift: TShiftState);
    162 begin
    163 {Если была нажата Enter (для тех, кто с мышами не дружит) - тоже не
    164 отказываемся послать сообщение}
    165 if Key = VK_RETURN then
    166 Button1.Click;
    167 end;


    Итак, Button2Click - вызывает диалог установки соединения (из второго юнита), а затем устанавливает это соединение. На данном вопросе мы останавливаться не будем. Button3Click и последующие события, добавляемые в Memo1 также довольно просты. Разберем подробнее обработчик события OnRead - ClientSocket1Read.

    Сначала мы сохраняем полученные по сокету данные в строку s. Затем, если нам прислали список других подключенных клиентов, то мы выделяем из строки s по одному юзеру и добавляем их последовательно в ListBox1. Таким образом ListBox1 становится списком юзеров.

    Далее - если нам прислали команду "#M" - обычное сообщение, то мы выделяем из s отправителя и само сообщение, а затем все это в стандартной для чатов форме выводим в Memo1.

    Если же был получен запрос на имя пользователя (ник) - команда "#N", то посылаем серверу свой ник.

    А если пришло приватное сообщение ("#P"), то из строки s мы выделяем имя отправителя, адресата и само сообщение. Если сообщение адресовано нам, либо мы же его и отправили - выводим его в Memo1.

    Теперь разберем Button1Click - обработчик нажатия кнопки отправки сообщения. Если поставлен флаг CheckBox1 (т.е. сообщение - приватное), а адресат в списке пользователей не выделен - выдаем ошибку. Далее, формируем в s команду для отправки сообщения: сначала тип ("#P" или "#M". Если "#P", то плюс имя адресата из списка юзеров), разделитель (";"), затем - имя отправителя, разделитель, и непосредственно сам текст сообщения. Далее идет отправка строки s по сокету, очистка поля ввода сообщения, и перевод в него фокуса (курсора).

    Edit1KeyDown нужен для того, чтобы вместо нажатия кнопки Button1 каждый раз, когда нужно отправить сообщение, просто нажимать Enter.

 

 
Страница 1 из 2 12 ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Скачать читы для одиночных и онлайн игр.Баги,хаки,модофикации,скачать вх,wallhack,Crossfire,WarFace,Aimbot для WarFace,читы для игр вконтакте,Тренеры для одиночных игр,читы для Battlefield,Графика & Photoshop,халява,раздача аккаунтов и ключей к играм!

Скачать читы для CS:GO,WarFace,Battlefield,Crossfire,Wot,Cod