.NET 4.x Переделать клиент-серверное приложение - C#
Формулировка задачи:
Не знаю, как правильно сформулировать вопрос...
Суть такова: нашел я пример клиент-серверного приложения(чат), всего на 2 пользователя. Только это все в одном приложении.
1 из пользователей использует его в качестве сервера, а другой подключается к нему. Но это все работает только по локалке.
Помогите мне переписать код, что бы можно было юзать не по локалке. Заранее спасибо!
Решение задачи: «.NET 4.x Переделать клиент-серверное приложение»
textual
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using System.Net;
- using System.Net.Sockets;
- using System.IO;
- namespace CS_tutorial
- {
- public partial class Form1 : Form
- {
- private TcpClient client;
- public StreamReader STR;
- public StreamWriter STW;
- public string recieve;
- public String text_to_send;
- public bool working;
- public Form1()
- {
- InitializeComponent();
- IPAddress[] localIP = Dns.GetHostAddresses(Dns.GetHostName());
- foreach (IPAddress address in localIP)
- {
- if (address.AddressFamily == AddressFamily.InterNetwork)
- {
- textBox3.Text = address.ToString();
- textBox4.Text = "25225";
- }
- }
- working = false;
- }
- private void button2_Click(object sender, EventArgs e)
- {
- working = true;
- button2.Enabled = false;
- TcpListener listener = new TcpListener(IPAddress.Any, int.Parse(textBox4.Text));
- listener.Start();
- client = listener.AcceptTcpClient();
- STR = new StreamReader(client.GetStream());
- STW = new StreamWriter(client.GetStream());
- STW.AutoFlush = true;
- backgroundWorker1.RunWorkerAsync();
- backgroundWorker2.WorkerSupportsCancellation = true;
- }
- private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
- {
- while (client.Connected)
- {
- try
- {
- recieve = STR.ReadLine();
- this.textBox2.Invoke(new MethodInvoker(delegate() { textBox2.AppendText("You: " + recieve + "\n"); }));
- if (String.IsNullOrEmpty(recieve))
- break;
- recieve = "";
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.ToString());
- }
- }
- }
- private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
- {
- if (client.Connected)
- {
- STW.WriteLine(text_to_send);
- this.textBox2.Invoke(new MethodInvoker(delegate() { textBox2.AppendText("Me: " + text_to_send + "\n"); }));
- }
- else
- {
- MessageBox.Show("Send failed!");
- }
- backgroundWorker2.CancelAsync();
- }
- private void button3_Click(object sender, EventArgs e)
- {
- working = true;
- backgroundWorker1.WorkerSupportsCancellation = true;
- client = new TcpClient();
- IPEndPoint IP_End = new IPEndPoint(IPAddress.Parse(textBox3.Text), int.Parse(textBox4.Text));
- try
- {
- client.Connect(IP_End);
- if (client.Connected)
- {
- textBox2.AppendText("Connected to server" + "\n");
- STW = new StreamWriter(client.GetStream());
- STR = new StreamReader(client.GetStream());
- STW.AutoFlush = true;
- backgroundWorker1.RunWorkerAsync();
- backgroundWorker2.WorkerSupportsCancellation = true;
- }
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.ToString());
- }
- }
- private void button1_Click(object sender, EventArgs e)
- {
- if (textBox1.Text != "")
- {
- text_to_send = textBox1.Text;
- backgroundWorker2.RunWorkerAsync();
- }
- textBox1.Text = "";
- }
- private void Form1_FormClosing(object sender, FormClosingEventArgs e)
- {
- if (working == true)
- {
- //client.Close();
- //STR.Close();
- STW.Close();
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д