Как отправить / получить несколько файлов, используя один сокет? - PullRequest
0 голосов
/ 24 апреля 2020

Как отправить / получить несколько файлов, используя один сокет? Я не знаю, что я делаю не так. Здесь я пытаюсь отправить один файл, но он не работает. Как правильно отправлять / получать несколько файлов через один сокет?

Вот мой код сервера. [сервер является отправителем]

    static void sendfile(Socket soc, IPEndPoint address)
    {
        try
        {
            soc.Bind(address);
            soc.Listen(1);
            Console.WriteLine("Listening for connection...");
            Socket client = soc.Accept();
            Console.WriteLine("Got connection from : {0}", 
                              client.RemoteEndPoint.ToString());
            while (true)
            {   
                // send filename
                string filename = "file1.exe";
                client.Send(Encoding.ASCII.GetBytes(filename));
                Console.WriteLine("filename has been send.");

                // send filesize
                int filesize = 31245;
                client.Send(BitConverter.GetBytes(filesize));
                Console.WriteLine("filesize has been send.");

                // send file's content
                string filedata = "Hey This is file1's content.";
                client.Send(Encoding.ASCII.GetBytes(filedata));
                Console.WriteLine("FileData has been send.");

                break;

            }

            client.Close();
            soc.Close();
            Console.WriteLine("socket closed.");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }

Вот мой код клиента. [клиент получатель]

    static void receivefile(Socket soc, IPEndPoint address)
    {
        try
        {
            while (true)
            {
                // Receiving filename.
                byte[] bytes = new byte[1024];
                soc.Receive(bytes);
                string filename = Encoding.ASCII.GetString(bytes);
                Console.WriteLine("Filename : {0}", filename);

                // Receiving filesize.
                bytes = new byte[1024];
                soc.Receive(bytes);
                int filesize = BitConverter.ToInt16(bytes, 0);
                Console.WriteLine("Filesize : {0}", filesize);

                // Receiving file's content.
                bytes = new byte[1024];
                soc.Receive(bytes);
                string filedata = Encoding.ASCII.GetString(bytes);
                Console.WriteLine("FileData : {0}", filedata);

                break;
            }

            soc.Close();
            Console.WriteLine("socket closed.");
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
    }

Выход сервера:

Listening for connection...
Got connection from : [fe80::89ad:7840:e1d0:4ce%11]:49909
filename send.
filesize send.
FileData send.
socket closed.

Выход клиента:

connected to [fe80::89ad:7840:e1d0:4ce%11]:11001
Filename : file1.exe3124564Hey This is file1.exe
Filesize :
FileData :
socket closed.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...