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