Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 8
1

Обычно разрешается одно использование адреса сокета (протокол/сетевой адрес/порт)

02.12.2013, 12:36. Показов 4973. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написал клиент-сервер для передачи файлов(первый опыт). При подключении клиента к серверу дает ошибку: "Обычно разрешается одно использование адреса сокета (протокол/сетевой адрес/порт)". Но в примерах подключение реализовано именно так. Как можно исправить ошибку? Заранее спасибо.

Сервер
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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 + "Клиент подключен";
                }
            }
        }
 
 
 
    }
    }
Клиент
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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;
            
        }
 
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2013, 12:36
Ответы с готовыми решениями:

Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)
При запуске вызывается ошибка на строчке с Bind. Обычно разрешается только одно использование...

Error: Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)
Можно ли как-то обойти эту ошибку, и отправить пакет на &quot;занятый&quot; адрес/порт

Сокеты. Ошибка «Обычно разрешается одно использование адреса сокета»
Имеется отправка строк string AcceptLogin = Логин.Text + Пароль.Text; //AcceptLogin =...

Ошибка в клиенте: Обычно разрешается одно использование адреса сокета
Здравствуйте, я изучаю сетевое программирование. Начал программирование сокетов. Вот сервер:...

1
48 / 48 / 22
Регистрация: 18.11.2013
Сообщений: 92
02.12.2013, 15:14 2
Цитата Сообщение от Alex_Moroz Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
bool connect = false;
while (!connect)
{
    try
    {
        client.Connect("localhost",11000);
    } 
    catch { }
}
а как вы собрались выйти из цикла? он же постоянно висит
1
02.12.2013, 15:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2013, 15:14
Помогаю со студенческими работами здесь

В сервере ошибка Обычно разрешается одно использование адреса сокета
В сервере моего приложения при отправке файла возникает ошибка &quot;Обычно разрешается одно...

Проблема с UdpClient (разрешается только одно использование адреса сокета)
Есть приложение, которое отсылает содержимое файла на указанный порт: using (UdpClient server =...

Обычно разрешается только одно использование адреса сокета(протокол/сетевой адрес/порт)
Вот возникла проблема, существует многопоточный C# сервер работающий на UDP, слушающий 4 порта и...

TcpSocket: Обычно разрешается только одно использование адреса сокета
Понимаю, что тем с таким заголовком уже уйма, но ответа я так и не увидел. А точнее - что делать в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru