.NET 4.x Переделать клиент-серверное приложение - C#

Узнай цену своей работы

Формулировка задачи:

Не знаю, как правильно сформулировать вопрос... Суть такова: нашел я пример клиент-серверного приложения(чат), всего на 2 пользователя. Только это все в одном приложении. 1 из пользователей использует его в качестве сервера, а другой подключается к нему. Но это все работает только по локалке. Помогите мне переписать код, что бы можно было юзать не по локалке. Заранее спасибо!

Решение задачи: «.NET 4.x Переделать клиент-серверное приложение»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. using System.Net;
  12. using System.Net.Sockets;
  13. using System.IO;
  14.  
  15.  
  16.  
  17. namespace CS_tutorial
  18. {
  19.     public partial class Form1 : Form
  20.     {
  21.         private TcpClient client;
  22.         public StreamReader STR;
  23.         public StreamWriter STW;
  24.         public string recieve;
  25.         public String text_to_send;
  26.  
  27.         public bool working;
  28.  
  29.         public Form1()
  30.         {
  31.             InitializeComponent();
  32.  
  33.             IPAddress[] localIP = Dns.GetHostAddresses(Dns.GetHostName());
  34.             foreach (IPAddress address in localIP)
  35.             {
  36.                 if (address.AddressFamily == AddressFamily.InterNetwork)
  37.                 {
  38.                     textBox3.Text = address.ToString();
  39.                     textBox4.Text = "25225";
  40.                 }
  41.             }
  42.             working = false;
  43.         }
  44.  
  45.         private void button2_Click(object sender, EventArgs e)
  46.         {
  47.             working = true;
  48.             button2.Enabled = false;
  49.             TcpListener listener = new TcpListener(IPAddress.Any, int.Parse(textBox4.Text));
  50.             listener.Start();
  51.             client = listener.AcceptTcpClient();
  52.             STR = new StreamReader(client.GetStream());
  53.             STW = new StreamWriter(client.GetStream());
  54.             STW.AutoFlush = true;
  55.             backgroundWorker1.RunWorkerAsync();
  56.             backgroundWorker2.WorkerSupportsCancellation = true;
  57.         }
  58.  
  59.         private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
  60.         {
  61.             while (client.Connected)
  62.             {
  63.                 try
  64.                 {
  65.                     recieve = STR.ReadLine();
  66.                     this.textBox2.Invoke(new MethodInvoker(delegate() { textBox2.AppendText("You: " + recieve + "\n"); }));
  67.                     if (String.IsNullOrEmpty(recieve))
  68.                         break;
  69.                     recieve = "";
  70.  
  71.                 }
  72.                 catch (Exception ex)
  73.                 {
  74.                     MessageBox.Show(ex.ToString());
  75.                 }
  76.             }
  77.         }
  78.  
  79.         private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
  80.         {
  81.             if (client.Connected)
  82.             {
  83.                 STW.WriteLine(text_to_send);
  84.                 this.textBox2.Invoke(new MethodInvoker(delegate() { textBox2.AppendText("Me: " + text_to_send + "\n"); }));
  85.             }
  86.             else
  87.             {
  88.                 MessageBox.Show("Send failed!");
  89.             }
  90.             backgroundWorker2.CancelAsync();
  91.         }
  92.  
  93.         private void button3_Click(object sender, EventArgs e)
  94.         {
  95.             working = true;
  96.             backgroundWorker1.WorkerSupportsCancellation = true;
  97.  
  98.             client = new TcpClient();
  99.             IPEndPoint IP_End = new IPEndPoint(IPAddress.Parse(textBox3.Text), int.Parse(textBox4.Text));
  100.  
  101.             try
  102.             {
  103.                 client.Connect(IP_End);
  104.                 if (client.Connected)
  105.                 {
  106.                     textBox2.AppendText("Connected to server" + "\n");
  107.                     STW = new StreamWriter(client.GetStream());
  108.                     STR = new StreamReader(client.GetStream());
  109.                     STW.AutoFlush = true;
  110.  
  111.                     backgroundWorker1.RunWorkerAsync();
  112.                     backgroundWorker2.WorkerSupportsCancellation = true;
  113.                 }
  114.             }
  115.             catch (Exception ex)
  116.             {
  117.                 MessageBox.Show(ex.ToString());
  118.             }
  119.         }
  120.  
  121.         private void button1_Click(object sender, EventArgs e)
  122.         {
  123.             if (textBox1.Text != "")
  124.             {
  125.                 text_to_send = textBox1.Text;
  126.                 backgroundWorker2.RunWorkerAsync();
  127.             }
  128.             textBox1.Text = "";
  129.         }
  130.  
  131.         private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  132.         {
  133.             if (working == true)
  134.             {
  135.                 //client.Close();
  136.                 //STR.Close();
  137.                 STW.Close();
  138.             }
  139.         }
  140.     }
  141. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы