0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 8
|
|
1
|
Обычно разрешается одно использование адреса сокета (протокол/сетевой адрес/порт)
02.12.2013, 12:36. Показов 4976. Ответов 1
Написал клиент-сервер для передачи файлов(первый опыт). При подключении клиента к серверу дает ошибку: "Обычно разрешается одно использование адреса сокета (протокол/сетевой адрес/порт)". Но в примерах подключение реализовано именно так. Как можно исправить ошибку? Заранее спасибо.
Сервер
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
|