Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/33: Рейтинг темы: голосов - 33, средняя оценка - 4.85
Yukikaze
341 / 320 / 48
Регистрация: 12.12.2011
Сообщений: 563
1

Сокеты: как передавать большие файлы

03.05.2012, 12:07. Просмотров 6379. Ответов 16
Метки нет (Все метки)

Решил попробовать себя в незнакомой среде, а точнее к клиент-серверных приложениях. Набросал сервер принимающий файлы, клиент, все заработало, но нормально передает только небольшие файлы весом в несколько килобайт.
Так я принимаю файлы
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
class Server
    {
        byte[] Data;
        Socket socket { get; set; }
        IPEndPoint ipEnd { get; set; }
        public Server()
        {
            Data = new byte[4];
            ipEnd = new IPEndPoint(IPAddress.Any, 1488);
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
            socket.Bind(ipEnd);
            socket.Listen(3);
        }
 
        public void Start()
        {
            while (true)
            {
                Socket client = socket.Accept();
                
                client.Receive(Data, 4, SocketFlags.None); //Берем первые 4 байта
                int totalLenght = BitConverter.ToInt32(Data, 0); //первые 4 байта - размер пакета
                Array.Resize(ref Data, totalLenght); //Устанавливаем размер буффера
                client.Receive(Data, 4, totalLenght - 4, SocketFlags.None); //тянем все остальное
 
                int NameLenght = BitConverter.ToInt32(Data, 4); //4 байта длинна строки
                string Name = Encoding.UTF8.GetString(Data, 8, NameLenght); //строка
                int FileLenght = BitConverter.ToInt32(Data, 8 + NameLenght); //еще 4 байта - размер файла
 
                byte[] file = new byte[FileLenght];
                Array.Copy(Data, 12 + NameLenght, file, 0, FileLenght);
                File.WriteAllBytes(Name, file);
 
                Console.WriteLine("Файл {0} размером {1} байт был сохранен!", Name, FileLenght);
            }
        }
    }

А так я их отправляю
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
public static void SendFile(string fileName)
        {
            try
            {
                IPEndPoint ipEnd = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1488);
                Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                FileInfo file = new FileInfo(fileName);
 
                byte[] _fileName = Encoding.UTF8.GetBytes(file.Name);
                byte[] _fileNameLength = BitConverter.GetBytes(_fileName.Length);
                byte[] _file = File.ReadAllBytes(file.FullName);
                byte[] _fileLength = BitConverter.GetBytes(_file.Length);
                byte[] _totalLength = BitConverter.GetBytes(4 + 4 + 4 + _fileName.Length + _file.Length);
                byte[] Packet = new byte[4 + 4 + _fileName.Length + _file.Length + 4];
 
                _totalLength.CopyTo(Packet, 0); //Размер пакета - 4 байта
                _fileNameLength.CopyTo(Packet, 4); //Длинна строки - 4 байта
                _fileName.CopyTo(Packet, 4 + 4); //Имя файла - N байт
                _fileLength.CopyTo(Packet, 4 + 4 + _fileName.Length); //Размер файла - 4 байта
                _file.CopyTo(Packet, 4 + 4 + _fileName.Length + 4); //Файл
 
                clientSock.Connect(ipEnd);
                clientSock.Send(Packet);
                clientSock.Close();
 
                Console.WriteLine("File {0} transferred", file.Name);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

Ваши мысли, предложения?
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2012, 12:07
Ответы с готовыми решениями:

Как передать по UDP большие файлы
Сабж... Интересует предача файлов размером до 4 мб.

Как отправлять большие файлы по UDP
Помогите модифицировать код, чтобы он передавал большие файлы, готов даже заплатить, срочно...

Как загрузить на сервер большие файлы.
Подскажите средства для загрузки на сервер больших файлов (~10M).

C# и большие XML файлы
Доброго времени суток. Помогите, пожалуйста, разобраться. Мне нужно рекурсивно (это...

Целесообразно ли передавать большие массивы как параметры в метод?
В классе есть метод и несколько массивов, с которыми метод выполняет операции. Для разных случаев -...

16
freest
Українець
423 / 317 / 16
Регистрация: 26.09.2009
Сообщений: 844
03.05.2012, 13:45 2
Цитата Сообщение от Yukikaze Посмотреть сообщение
IPEndPoint ipEnd = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1488);
Думаю можно файл разбивать на блоки, а потом по кускам передавать.
0
Yukikaze
341 / 320 / 48
Регистрация: 12.12.2011
Сообщений: 563
03.05.2012, 14:32  [ТС] 3
Фактически они передаются, правда немного с ошибками, картинки в высоком разрешении обрезанные, музыка воспроизводиться кусками.
Размер пакета, имя файла, в общем все параметры передаются хорошо, а сам файл собрать обратно не получается.
Пытался собирать через BinaryWriter но получалось еще хуже чем чрез File.WriteAllBytes
0
freest
Українець
423 / 317 / 16
Регистрация: 26.09.2009
Сообщений: 844
03.05.2012, 14:39 4
Так ошибки надо отлавливать и исправлять. Или заново отправлять блок.
0
outoftime
║XLR8║
844 / 743 / 223
Регистрация: 25.07.2009
Сообщений: 3,713
Записей в блоге: 5
03.05.2012, 14:40 5
Меня такое вполне устраивает:
Код
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Poker.Messages
{
    public class NetworkMessage
    {
        public void ResizeBodyBuffer()
        {
            if (bodyBuffer.Length < Size)
            {
                bodyBuffer = new byte[Size];
            }
        }
 
        public byte[] sizeBuffer = new byte[10];
        public int Size
        {
            get
            {
                int size = -1;
                int.TryParse(Encoding.UTF8.GetString(sizeBuffer), out size);
                return size;
            }
        }
 
        public byte[] bodyBuffer = new byte[0];
        public string Body
        {
            get { return Encoding.UTF8.GetString(bodyBuffer, 0, Size); }
        }
    }
}
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using Poker;
using Poker.Messages;
 
namespace PokerClient.Classes
{
    public class Client
    {
        public Client(string host, int port)
            : this(Dns.GetHostAddresses(host)[0], port) { }
 
        public Client(IPAddress address, int port)
            : this(new IPEndPoint(address, port)) { }
 
        public Client(IPEndPoint endPoint)
        {
            m_client = new TcpClient();
            m_endPoint = endPoint;
        }
 
        public void Connect()
        {
            try
            {
                m_client.BeginConnect(m_endPoint.Address, m_endPoint.Port, new AsyncCallback(BeginConnectCallback), m_client.Client);
            }
            catch (Exception exception) { }
        }
 
        public virtual void SendMessage(string message)
        {
            m_sendMsgs.Add(message);
            SendMessageIternal();
        }
 
        private void BeginConnectCallback(IAsyncResult ar)
        {
            Socket socket = ar.AsyncState as Socket;
            try
            {
                socket.EndConnect(ar);
                m_client.Client.BeginReceive(m_readMsg.sizeBuffer, 0, m_readMsg.sizeBuffer.Length, 0, new AsyncCallback(BeginReceiveSizeCallback), null);
            }
            catch (Exception exception) { }
        }
 
        private void SendMessageIternal()
        {
            string message = m_sendMsgs.First();
            byte[] data = Encoding.UTF8.GetBytes(message);
            byte[] size = Encoding.UTF8.GetBytes(String.Format("{0:0000000000}", data.Length));
            data = size.Concat(data).ToArray();
            try
            {
                m_client.Client.BeginSend(data, 0, data.Length, 0, new AsyncCallback(BeginSendCallback), null);
            }
            catch (Exception exception) { }
        }
 
        private void BeginSendCallback(IAsyncResult ar)
        {
            m_client.Client.EndSend(ar);
            m_sendMsgs.RemoveAt(0);
 
            if (m_sendMsgs.Count > 0)
            {
                SendMessageIternal();
            }
        }
 
        private void BeginReceiveSizeCallback(IAsyncResult ar)
        {
            try
            {
                m_client.Client.EndReceive(ar);
                m_readMsg.ResizeBodyBuffer();
                m_client.Client.BeginReceive(m_readMsg.bodyBuffer, 0, m_readMsg.Size, 0, new AsyncCallback(BeginReceiveBodyCallback), null);
            }
            catch (Exception exception) { }
        }
 
        private void BeginReceiveBodyCallback(IAsyncResult ar)
        {
            try
            {
                m_client.Client.EndReceive(ar);
                FormMain.Instance.ProcessServerMessage(m_readMsg.Body);
                m_client.Client.BeginReceive(m_readMsg.sizeBuffer, 0, m_readMsg.sizeBuffer.Length, 0, new AsyncCallback(BeginReceiveSizeCallback), null);
            }
            catch (Exception exception) { }
        }
 
        private TcpClient m_client = null;
        private IPEndPoint m_endPoint = null;
        private NetworkMessage m_readMsg = new NetworkMessage();
        private List<string> m_sendMsgs = new List<string>();
    }
}
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using PokerServer.Classes.Server.Participants;
using PokerServer.Classes.Server.Rooms;
 
namespace PokerServer.Classes.Server
{
    public class Server
    {
        public Server(string host, int port)
            : this(Dns.GetHostAddresses(host)[0], port) { }
 
        public Server(IPAddress address, int port)
            : this(new IPEndPoint(address, port)) { }
 
        public Server(IPEndPoint endPoint)
        {
            m_listener = new TcpListener(endPoint);
            m_listener.Start(100);
        }
 
        public void StartAccept()
        {
            m_listener.Server.BeginAccept(new AsyncCallback(BeginAcceptCallback), null);
        }
 
        private void BeginAcceptCallback(IAsyncResult ar)
        {
            Socket client = m_listener.Server.EndAccept(ar);
            Session session = new Session(client, m_loginRoom);
            session.Start();
            StartAccept();
        }
 
        private TcpListener m_listener;
        private LoginRoom m_loginRoom = new LoginRoom();
    }
}
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PokerServer.Classes.Server.Participants;
using Poker.Messages;
 
namespace PokerServer.Classes.Server.Rooms
{
    public class Room
    {
        public void Join(Session participant)
        {
            m_participants.Add(participant);
        }
 
        public void Leave(Session participant)
        {
            m_participants.Remove(participant);
        }
 
        public virtual void ProccessClientMessage(string message, Session sender) 
        {
            FormMain.Instance.ProcessCommand(PokerServer.Classes.Scenes.BaseScene.Command.WriteLogMessage, message);
        }
 
        private List<Session> m_participants = new List<Session>();
    }
}
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
108
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using PokerServer.Classes.Server.Rooms;
using Poker;
using Poker.Messages;
 
namespace PokerServer.Classes.Server.Participants
{
    public class Session
    {
        public Session(Socket socket, Room room)
        {
            m_socket = socket;
            m_room = room;
        }
 
        public virtual void Start()
        {
            m_room.Join(this);
            try
            {
                m_socket.BeginReceive(m_readMsg.sizeBuffer, 0, m_readMsg.sizeBuffer.Length, 0, new AsyncCallback(BeginReceiveSizeCallback), null);
            }
            catch (Exception exception) 
            {
                m_room.Leave(this);
                FormMain.Instance.ProcessCommand(PokerServer.Classes.Scenes.BaseScene.Command.WriteLogMessage,
                    exception.Message);
            }
        }
 
        public virtual void SendMessage(string message)
        {
            m_sendMsgs.Add(message);
            SendMessageIternal();
        }
 
        private void SendMessageIternal()
        {
            string message = m_sendMsgs.First();
            byte[] data = Encoding.UTF8.GetBytes(message);
            byte[] size = Encoding.UTF8.GetBytes(String.Format("{0:0000000000}", data.Length));
            data = size.Concat(data).ToArray();
            try
            {
                m_socket.BeginSend(data, 0, data.Length, 0, new AsyncCallback(BeginSendCallback), message);
            }
            catch (Exception exception) 
            {
                m_room.Leave(this);
                FormMain.Instance.ProcessCommand(PokerServer.Classes.Scenes.BaseScene.Command.WriteLogMessage,
                    exception.Message);
            }
        }
 
        private void BeginSendCallback(IAsyncResult ar)
        {
            m_socket.EndSend(ar);
            m_sendMsgs.RemoveAt(0);
 
            if (m_sendMsgs.Count > 0)
            {
                SendMessageIternal();
            }
        }
 
        private void BeginReceiveSizeCallback(IAsyncResult ar)
        {
            try
            {
                m_socket.EndReceive(ar);
                m_readMsg.ResizeBodyBuffer();
                m_socket.BeginReceive(m_readMsg.bodyBuffer, 0, m_readMsg.Size, 0, new AsyncCallback(BeginReceiveBodyCallback), null);
            }
            catch (Exception exception)
            {
                m_room.Leave(this);
                FormMain.Instance.ProcessCommand(PokerServer.Classes.Scenes.BaseScene.Command.WriteLogMessage,
                    exception.Message);
            }
        }
 
        private void BeginReceiveBodyCallback(IAsyncResult ar)
        {
            try
            {
                m_socket.EndReceive(ar);
                m_room.ProccessClientMessage(m_readMsg.Body, this);
                m_socket.BeginReceive(m_readMsg.sizeBuffer, 0, m_readMsg.sizeBuffer.Length, 0, new AsyncCallback(BeginReceiveSizeCallback), null);
            }
            catch (Exception exception)
            {
                m_room.Leave(this);
                FormMain.Instance.ProcessCommand(PokerServer.Classes.Scenes.BaseScene.Command.WriteLogMessage,
                    exception.Message);
            }
        }
 
        public Socket Socket { get { return m_socket; } }
        private Socket m_socket;
        private Room m_room;
        private NetworkMessage m_readMsg = new NetworkMessage();
        private List<string> m_sendMsgs = new List<string>();
    }
}
1
Yukikaze
341 / 320 / 48
Регистрация: 12.12.2011
Сообщений: 563
03.05.2012, 18:08  [ТС] 6
outoftime, а где тут пример передачи файлов?

Добавлено через 1 минуту
freest, что вы подразумеваете в отлове ошибок, как их отлавливать в массиве байт?
0
Heisenberg
44 / 45 / 15
Регистрация: 11.08.2010
Сообщений: 226
03.05.2012, 22:18 7
У вас проблема в сборке файлов больших размеров или абсолютно всех?
0
Yukikaze
341 / 320 / 48
Регистрация: 12.12.2011
Сообщений: 563
03.05.2012, 22:58  [ТС] 8
Heisenberg, на сколько я понял все что больше 64кб ломается, как разбить файл по 64кб, а с другой стороны принять в правильном порядке я пока не понимаю
0
freest
Українець
423 / 317 / 16
Регистрация: 26.09.2009
Сообщений: 844
03.05.2012, 23:28 9
Чтоб отлавливать ошибки надо учить теорию кодирования. А чтоб собрать в правильном порядке надо к каждому пакету заголовок с номером ставить.
0
Heisenberg
44 / 45 / 15
Регистрация: 11.08.2010
Сообщений: 226
04.05.2012, 00:45 10
Там придел размера пакета 64кб
Шлите перед файлом размер данных на сервер, чтобы тот знал сколько принимать. Потом отправляйте буффер. Далее проверяйте, если размер буфера больше чем UInt16.Max (это 65536), то удаляйте первые 65536 байт из массива и отправляйте еще раз, и так до тех пор пока размер буфера после отправки (он будет таким же, что и до отправки, он там не меняется) не будет меньше или равен 65536, тогда больше делать ничего не надо. Это будет выглядеть примерно так

C#
1
2
3
4
5
6
7
            int length = 55555;
            List<byte> array = new List<byte>(length);
            while (array.Count > UInt16.MaxValue)
            {
                socket.Send(array.ToArray());
                array.RemoveRange(0, (int)UInt16.MaxValue);
            }
1
Yukikaze
341 / 320 / 48
Регистрация: 12.12.2011
Сообщений: 563
04.05.2012, 02:55  [ТС] 11
Heisenberg, спасибо, хоть кто-то вразумительно ответил.
0
Yukikaze
341 / 320 / 48
Регистрация: 12.12.2011
Сообщений: 563
05.05.2012, 06:00  [ТС] 12
Долго же я конечно разбирался, но вот что получилось
Сервер
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
class Server
    {
        private TcpListener listener { get; set; }
        private NetworkStream stream { get; set; }
 
        public Server()
        {
            listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 1488);
            listener.Start();
            new Thread(ListenForClients).Start();
        }
 
        private void ListenForClients()
        {
            while (true)
            {
                TcpClient client = this.listener.AcceptTcpClient();
                new Thread(HandleClient).Start(client);
            }
        }
 
        private void HandleClient(object tcpClient)
        {
            TcpClient client = (TcpClient)tcpClient;
            while (client.Connected)
            {
                Recieve(client);
            }
        }
 
        private void Recieve(TcpClient client)
        {
            byte[] buffer = new byte[client.ReceiveBufferSize];
            try
            {
                stream = client.GetStream();
                int bytesRead = stream.Read(buffer, 0, 12);
                if(bytesRead == 0) return;
 
                ushort id = BitConverter.ToUInt16(buffer, 0);
                long len = BitConverter.ToInt64(buffer, 2);
                ushort nameLen = BitConverter.ToUInt16(buffer, 10);
                stream.Read(buffer, 0, nameLen);
                string fileName = Encoding.UTF8.GetString(buffer, 0, nameLen);
 
                if (id == 1)
                {
                    using (BinaryWriter writer = new BinaryWriter(new FileStream(fileName, FileMode.Create)))
                    {
                        int recieved = 0;
                        while (recieved < len)
                        {
                            bytesRead = stream.Read(buffer, 0, client.ReceiveBufferSize);
                            recieved += bytesRead;
                            writer.Write(buffer, 0, bytesRead);
                            Console.WriteLine("{0} bytes recieved.", recieved);
                        }
                    }
                    Console.WriteLine("File length: {0}", len);
                    Console.WriteLine("File Name: {0}", fileName);
                    Console.WriteLine("Recieved!");
                }
                else
                {
                    Console.WriteLine(fileName);
                }
            }
            catch (Exception)
            {
                stream.Close();
                client.Close();
            }
            finally
            {
                stream.Flush();
            }
        }
    }

Клиент
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
internal class Program
    {
        private static TcpClient client;
        private static NetworkStream stream;
        private static void Main(string[] args)
        {
            string temp;
            client = new TcpClient("localhost", 1488);
            stream = client.GetStream();
            Console.WriteLine(client.SendBufferSize);
 
            while ((temp = Console.ReadLine()) != "exit")
            {
                Send(temp);
            }
 
            SendFile(new FileInfo(@"File_path"));
            Console.ReadKey(true);
        }
 
        public static void SendFile(FileInfo file)
        {
            byte[] id = BitConverter.GetBytes((ushort)1);
            byte[] size = BitConverter.GetBytes(file.Length);
            byte[] fileName = Encoding.UTF8.GetBytes(file.Name);
            byte[] fileNameLength = BitConverter.GetBytes((ushort)fileName.Length);
            byte[] fileInfo = new byte[12 + fileName.Length];
 
            id.CopyTo(fileInfo, 0);
            size.CopyTo(fileInfo, 2);
            fileNameLength.CopyTo(fileInfo, 10);
            fileName.CopyTo(fileInfo, 12);
 
            stream.Write(fileInfo, 0, fileInfo.Length); //Размер файла, имя
 
            byte[] buffer = new byte[1024 * 32];
            int count;
 
            long sended = 0;
 
            using (FileStream fileStream = new FileStream(file.FullName, FileMode.Open))
                while ((count = fileStream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    stream.Write(buffer, 0, count);
                    sended += count;
                    Console.WriteLine("{0} bytes sended.", sended);
                }
            stream.Flush();
        }
 
        
        private static void Send(string message)
        {
            byte[] id = BitConverter.GetBytes((ushort)0);
            byte[] msg = Encoding.UTF8.GetBytes(message);
            byte[] msgLength = BitConverter.GetBytes((ushort)msg.Length);
            byte[] fileInfo = new byte[12 + msg.Length];
 
            id.CopyTo(fileInfo, 0);
            msgLength.CopyTo(fileInfo, 10);
            msg.CopyTo(fileInfo, 12);
 
            stream.Write(fileInfo, 0, fileInfo.Length);
            stream.Flush();
        }
    }

Файл 650мб передает без ошибок, файлы большего размера еще не пробовал
3
outoftime
║XLR8║
844 / 743 / 223
Регистрация: 25.07.2009
Сообщений: 3,713
Записей в блоге: 5
05.05.2012, 13:29 13
Yukikaze, а чем тебе асинхронные методы не нравятся? Не нужно самому заботиться о потоках и передавай какие угодно файлы только бы рамы хватило (:
0
Yukikaze
341 / 320 / 48
Регистрация: 12.12.2011
Сообщений: 563
05.05.2012, 15:12  [ТС] 14
outoftime, вопрос стоит не в "нравится/не нравится", а в том, что я с достойным примером еще не сталкивался, не совсем понимаю его работу.
Если бы кто то по пунктам расписал алгоритм или еще лучше блок-схему нарисовал...

ЗЫ Кстати передача файла кушает очень мало памяти, т.к. передает не весь файл целиком, а по 32к байт
0
Kitas
0 / 0 / 0
Регистрация: 17.05.2017
Сообщений: 62
07.10.2018, 17:03 15
Yukikaze, а где у тебя точка входа? Ошибку выдает

Добавлено через 1 час 34 минуты
и только в сервере
0
Lexeq
956 / 621 / 442
Регистрация: 21.01.2014
Сообщений: 1,667
Завершенные тесты: 2
07.10.2018, 22:45 16
Kitas, Точка входа может быть только одна. В данном случае она находится в классе клиента.
0
Wolfdp
886 / 793 / 205
Регистрация: 15.06.2012
Сообщений: 3,129
Записей в блоге: 1
Завершенные тесты: 1
09.10.2018, 14:17 17
не глядя -- не проверяешь сколько реально пришло байт. Смотрим...

Цитата Сообщение от Yukikaze Посмотреть сообщение
C#
1
client.Receive(Data, 4, totalLenght - 4, SocketFlags.None);
Тадам!
0
09.10.2018, 14:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2018, 14:17

Как преобразовать в строке все маленькие буквы в большие а большие в маленькие?
Дана строка .Преобразовать в ней все маленькие буквы в большие а большие в маленькие. Вот что я...

Как передавать картинку через сокеты?
Как передавать картинку через сокеты?

Нужно передавать большие объёмы текстов
всем привет. Такая проблемка вылезла. Мне нужно передавать большие объёмы текстов через &lt;Input ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru