Обычно разрешается одно использование адреса сокета (протокол/сетевой адрес/порт) - 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 { }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.625 из 5
Похожие ответы