Не удается подключится к серверу. В чем может быть ошибка? - C#
Формулировка задачи:
Написал клиент-сервер для передачи файлов. С сетями имею дело в первый раз. В предыдущей версии данной программы разбил на куски прослушку и отправку файла в сервере, и подключение к серверу и прием файла в клиенте. Подключение осуществлялось, но передача файлов нет. В данной версии, не осуществляется даже подключение. Опыта в данном деле нет, поэтому если кто-то сталкивался с подобными задачами и укажет на ошибку, буду очень благодарен.
Сервер
Клиент
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using System.Threading; using System.Net; using System.IO; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public string filename; TcpClient handler; TcpListener sListener; public Form1() { InitializeComponent(); } //Выбор файла и извлечение его имени private void browseButton_Click(object sender, EventArgs e) { using (OpenFileDialog selectfile = new OpenFileDialog()) { if (selectfile.ShowDialog() == System.Windows.Forms.DialogResult.OK) { LogBox.Text = "Файл выбран"; filename = selectfile.FileName; } } } private void Transfer_Click(object sender, EventArgs e) { // Создаем конечную сетевую точку для прослушивания любого IP и портом 11000 IPEndPoint myEndpoint = new IPEndPoint(IPAddress.Any, 11000); try { sListener = new TcpListener(myEndpoint); //Начинаем прослушивание, очередь которого в 100 заявок sListener.Start(100); LogBox.Text = Environment.NewLine + "Создаем сокет"; //Обрабатываем запросы подключения к серверу, если имеются принимаем и начинаем работу с сокетом handler while (true) { Application.DoEvents(); if (sListener.Pending()) { handler = sListener.AcceptTcpClient(); sListener.Stop(); LogBox.Text = Environment.NewLine + "Клиент подключен"; } } } catch { LogBox.Text = Environment.NewLine + "Не удалось подключиться к клиенту"; } if (handler.Connected) { //Переводим данные файла в универсальный формат чтения и записи, после в двоичный и получаем данные на клиентский совет using (FileStream inputStream = File.OpenRead(filename)) using (NetworkStream outputStream = handler.GetStream()) using (BinaryWriter writer = new BinaryWriter(outputStream)) { long lenght = inputStream.Length; long totalBytes = 0; int readBytes = 0; byte[] buffer = new byte[2048]; writer.Write(Path.GetFileName(filename)); writer.Write(lenght); do { readBytes = inputStream.Read(buffer, 0, buffer.Length); outputStream.Write(buffer, 0, readBytes); totalBytes += readBytes; } while (handler.Connected && totalBytes < lenght); } handler.Close(); } } private void Cancel_Click(object sender, EventArgs e) { //Если подключен клиентской сокет, отключаем его if (handler.Connected) handler.Close(); LogBox.Text = Environment.NewLine+"Передача отменена"; } } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using System.IO; using System.Net; namespace WindowsFormsApplication1 { public partial class Form1 : Form { TcpClient client; string folder; public Form1() { InitializeComponent(); } private void Cancel_Click(object sender, EventArgs e) { if (client.Connected) client.Close(); } private void ReceiveFile_Click(object sender, EventArgs e) { IPHostEntry localMachineInfo = Dns.GetHostEntry(Dns.GetHostName()); IPEndPoint myEndpoint = new IPEndPoint(localMachineInfo.AddressList[0], 11000); client = new TcpClient(myEndpoint); try { client.Connect(myEndpoint); LogBox.Text = Environment.NewLine + "Подключение к серверу"; } catch { LogBox.Text = Environment.NewLine + "Не удалось подключится к серверу"; } if (client.Connected) { using (NetworkStream inputStream = client.GetStream()) using (BinaryReader reader = new BinaryReader(inputStream)) { string filename = reader.ReadString(); long lenght = reader.ReadInt64(); using (FileStream outputStream = File.Open(Path.Combine(folder, filename), FileMode.Create)) { long totalBytes = 0; int readBytes = 0; byte[] buffer = new byte[2048]; do { readBytes = inputStream.Read(buffer, 0, buffer.Length); outputStream.Write(buffer, 0, readBytes); totalBytes += readBytes; } while (client.Connected && totalBytes < lenght); client.Close(); } } } } private void BrowseButton_Click(object sender, EventArgs e) { using (folderBrowserDialog1 = new FolderBrowserDialog()) if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) folder = folderBrowserDialog1.SelectedPath; textBox2.Text=folderBrowserDialog1.SelectedPath; } } }
Решение задачи: «Не удается подключится к серверу. В чем может быть ошибка?»
textual
Листинг программы
using System; using System.IO; using System.Linq; using System.Net; using System.Net.Sockets; using CommonTransportLibrary; namespace TestClient { class Program { static void Main(string[] args) { var client = new SocketClient(); client.ConnectEvent += (sender, e) => { Console.WriteLine("Сервер доступен!!!"); using (var networkStream = new NetworkStream(e.Client, FileAccess.ReadWrite)) { var buffer = new byte[5]; networkStream.Read(buffer, 0, 5); Console.Write("Прием: "); buffer.ToList().ForEach(x => Console.Write("{0}, ", x)); Console.WriteLine(); networkStream.Write(new byte[] {5, 4, 3, 2, 1}, 0, 5); Console.WriteLine("Отправка: 5, 4, 3, 2, 1"); Console.ReadLine(); } }; client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 11000)); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д