Обычно разрешается одно использование адреса сокета (протокол/сетевой адрес/порт) - 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; 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) { //Переводим данные файла в универсальный формат чтения и записи, после в двоичный и получаем данные на клиентский совет 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+"Передача отменена"; } private void WaitConnection_Click(object sender, EventArgs e) { //Создаем конечную сетевую точку для прослушивания любого IP и портом 11000 IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 11000); TcpListener sListener = new TcpListener(ipEndPoint); //Начинаем прослушивание, очередь которого в 100 заявок sListener.Start(100); //Обрабатываем запросы подключения к серверу, если имеются принимаем и начинаем работу с сокетом handler while (true) { Application.DoEvents(); if (sListener.Pending() == true) { handler = sListener.AcceptTcpClient(); 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 Connectoin_Click(object sender, EventArgs e) { IPHostEntry localMachineInfo = Dns.GetHostEntry(Dns.GetHostName()); IPEndPoint myEndpoint = new IPEndPoint(localMachineInfo.AddressList[0], 11000); client = new TcpClient(myEndpoint); bool connect = false; while (!connect) { try { [B] [COLOR="Red"]client.Connect("localhost",11000);[/COLOR][/B] } catch { } } } private void ReceiveFile_Click(object sender, EventArgs e) { 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
Листинг программы
bool connect = false; while (!connect) { try { client.Connect("localhost",11000); } catch { } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д