Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> клиент / сервер программа 
:(
    Опции темы
rubenhak
  Дата 4.2.2004, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 17.9.2003
Где: Yerevan

Репутация: нет
Всего: нет



кто может помочь написать простенькую программу - скорее две
программы , задача состоит в следующем нужно написать текст
в текстбоксе , и нажать SEND smile.gif , и этот текст должен появитса
в текстбоксе второй програмы wink.gif
PM WWW MSN   Вверх
Kurt
Дата 4.2.2004, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



Если тебе нужна общая идея, вот тексты клиента и сервера (тут сервер пишет числа, а клиент их выводит). Это консольные проги, но идея одна и та же.. Тебе надо сделать приложение, к-е принимает строку - сервером, а передатчик - клиентом.
Вот тексты примера:
Код

/* простой сервер наC# */

using System;
using System.Net.Sockets;
using System.IO;

namespace SharpIONetServer
{
class NetServer
{
 private void SendToClient(Socket clientSocket)
 {
 NetworkStream netStream = new NetworkStream(clientSocket);
 BinaryWriter binWriter = new BinaryWriter(netStream);
 Console.WriteLine("Begin of data transmission");
 for (int i=0; i<=100000; i++)
  binWriter.Write(i);
 binWriter.Close();
 }

static void Main(string[] args)
{
 NetServer ns = new  NetServer();
 TcpListener tcpListener = new TcpListener(65125);
 tcpListener.Start();
 Console.WriteLine("Start of listening");
 while(true)
 {
  Socket clientSocket = tcpListener.AcceptSocket();
  if (clientSocket.Connected)
  {
   Console.WriteLine("Client connected");
   ns.SendToClient(clientSocket);
   Console.WriteLine("Done");
   clientSocket.Close();
   Console.WriteLine("Client disconnected");
  }
 }
}
}
}


Клиент:
Код

/* простейший клиент */
using System;
using System.Net.Sockets;
using System.IO;

namespace SharpIONetClient
{
class NetClient
{
 static void Main(string[] args)
 {
 TcpClient serverSocket;
 try
 {
 serverSocket = new TcpClient("localHost", 65125);
 }
 catch
 {
 Console.WriteLine("Failed to connect to server at {0}:65125","localhost");
 return;
 }
 NetworkStream netStream = serverSocket.GetStream();
 BinaryReader binReader = new BinaryReader(netStream);
 try
 {
 Console.WriteLine("Begin of file transmission");
 int val = 0;
 while(true)
 {
  int i = binReader.ReadInt32();
  if (val++ != i)
  {
  Console.WriteLine("buf[{0}] = {1}",val,i);
  }
 }
 }
 catch (EndOfStreamException)
 {
 Console.WriteLine("End of file transaction");
 }
 catch (Exception e)
 {
 Console.WriteLine(e.Message);
 }
 binReader.Close();
 }
}
}




--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Kurt
Дата 6.2.2004, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



А вот полностью ответ на твой вопрос (я надеюсь).

Сервер:
Код
/* Server.cs */

using System;
using System.Windows.Forms;
using System.Drawing;
using System.Net.Sockets;
using System.IO;
using System.Threading;

namespace ServerApp{

public class Server: Form{
 private TextBox textBox;
 private Thread thread;
 TcpListener tcpListener;

 private void ListenThread(){
  tcpListener = new TcpListener(9999);
  tcpListener.Start();
  MessageBox.Show("We started listening!");
 
  while(true){
   Socket clientSocket = tcpListener.AcceptSocket();
   if (clientSocket.Connected){
    NetworkStream netStream = new NetworkStream(clientSocket);
    StreamReader strReader = new StreamReader(netStream);
    textBox.Text = strReader.ReadLine();
    strReader.Close();
    clientSocket.Close();
   }
  }
 }

 private Server(){
  textBox = new TextBox();
  textBox.Size = new Size(150,50);
  textBox.Location = new Point(10,10);
  this.Controls.Add(textBox);

  thread = new Thread(new ThreadStart(ListenThread));
  thread.Start();

  Application.ApplicationExit += new EventHandler(App_OnExit);
 
  this.Text = "We are listening clients..";

 }
 
 private void App_OnExit(object sender, EventArgs EvArgs){
  tcpListener.Stop();
  thread.Interrupt();
 }

 public static void Main(){
  Application.Run(new Server());
  return;
 }
}

}


Клиент:
Код

/* Client.cs */

using System;
using System.Windows.Forms;
using System.Drawing;
using System.Net.Sockets;
using System.IO;

namespace ClientApp{

public class Client: Form{

 private TextBox textBox;
 private Button button;

 private Client(){
 
  textBox = new TextBox();
  textBox.Size = new Size(150,50);
  textBox.Location = new Point(10,10);
  this.Controls.Add(textBox);
 
  button = new Button();
  button.Text = "Send!";
  button.Location = new Point(10,40);
  button.Click += new EventHandler(button_OnClick);
  this.Controls.Add(button);
   
 }

 private void button_OnClick(object sender, EventArgs EvArgs){
 
  TcpClient tcpClient;
 
  try{
   tcpClient = new TcpClient("localhost", 9999);
  }
  catch{
   MessageBox.Show("Failed to connect to server!");
   return;
  }
 
  try{
   NetworkStream netStream = tcpClient.GetStream();
   StreamWriter strWriter = new StreamWriter(netStream);
   strWriter.WriteLine(textBox.Text);
   strWriter.Close();
   netStream.Close();
  }
  catch(Exception e){
   MessageBox.Show(e.Message);
  }  

 }

 public static void Main(){
  Application.Run(new Client());
  return;
 }  
}
}




Небольшие замечания..

Сервер:
Как видишь прослушивание порта расположено в отдельном потоке, инициализация которого происходит в конструкторе. Если не использовать поток, а прям в конструкторе запустить цикл прослушивания - ты даже не увидишь формы - ведь пока не завершится прослушивание, не завершится конструктор, т.е не будет отображена форма.
А в конце надо обязательно не забыть остановить поток - а то приложение останется висеть в системе. (оно и понятно)
Далее. Это только пример и реализует ответ на вопрос. Если писать что-то типа чата, то так не пойдет - ведь здесь одновременно может быть подсоединен только один клиент! Для "моногоклиентности" я бы сделал один главный поток, к-й прослушивает порт и при соединении отсылал бы обработку запроса в отдельно создаваемый поток, а сам бы возвращался к прослушиванию.


Клиент:
В этом приложении ты каждый раз по нажатию кнопки коннектишься, выполняешь операции и отсоединяешься. В "серьезном" приложении можно коннектиться только один раз - при инициализации приложения, но тогда желателен "многопоточный" сервер - ведь ты блокирешь доступ на все время работы клиента! А в моем случае - только на время пересылки.

Все. Спасибо за внимание. Я старался написать как можно понятнее..


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
rubenhak
Дата 6.2.2004, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 17.9.2003
Где: Yerevan

Репутация: нет
Всего: нет



Курт большое тебе спасибо, все получилось,
я использовал твой первый пример, помеял BitWriter
на StreamWriter итд. smile.gif

пока smile.gif
PM WWW MSN   Вверх
rubenhak
Дата 6.2.2004, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 17.9.2003
Где: Yerevan

Репутация: нет
Всего: нет



да конечно нужно открыть новый поток,
но в конце когда казалось что все готово
прога не закривалась, прошлось в ручную
остановить thread. я почти закончил свои
мини-project (mp3 player) в конце тебе пошлю
PM WWW MSN   Вверх
rubenhak
Дата 6.2.2004, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 146
Регистрация: 17.9.2003
Где: Yerevan

Репутация: нет
Всего: нет



жаль что не могу поднять тебе рейтинг (у меня 20 сообщений)
PM WWW MSN   Вверх
AntonSaburov
Дата 6.2.2004, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 6
Всего: 118



Цитата
жаль что не могу поднять тебе рейтинг (у меня 20 сообщений)

Модератор отметил smile.gif - Kurt большой молодец.
PM MAIL WWW ICQ   Вверх
Kurt
Дата 6.2.2004, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



Цитата
мини-project (mp3 player) в конце тебе пошлю

Я думал, ты пишешь какой-нибудь чат..
Только не забудь про обещание. smile.gif
Цитата
жаль что не могу поднять тебе рейтинг (у меня 20 сообщений

Давай набирай! Успехов!
..А по поводу поднятия рейтинга.. я подожду. (smile.gif шутка)
В общем, народ, спасибо!
Всегда приятно быть кому-то полезным..


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0765 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.