.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(); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д