Отправка файлов с клиента на сервер - PullRequest
1 голос
/ 17 апреля 2011

Я пытаюсь отправить несколько файлов на сервер каждые 2 секунды, и после отправки файла он удаляется, и программа перезапускается, чтобы снова сгенерировать файл, который необходимо снова отправить на сервер.

Но он работает до тех пор, пока сервер не будет подключен к сети ... В случае перезапуска сервера все функции программы будут работать нормально, но когда эта функция вызывается, она продолжает отображать "Невозможно установить соединение, поскольку целевой компьютерактивно отказывался от него " независимо от того, когда сервер подключается к сети между ..

        private void sendfile()
    {
        timer.Stop();
        RegistryKey theLocalMachine = Registry.LocalMachine;
        RegistryKey theSystem2 = theLocalMachine.OpenSubKey(@"SOFTWARE\\NetworkUsagemonitoring\\", true);
        RegistryKey interfacekey4 = theSystem2.OpenSubKey("Usagerecorder", true);
        string serverno = interfacekey4.GetValue("serverno").ToString();
        for (int i = 0; i < netarr1.Length; i++)
        {
            for (int j = 0; j < netarr2.Length; j++)
            {
                if (netarr1[i].Name == netarr2[j])
                {
                    if (recorded[j] == 1)
                    {
                        try
                        {
                            IPEndPoint ipEnd = new IPEndPoint(IPAddress.Parse(serverno), 5656);
                            Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);

                            if (File.Exists(@"C:\" + netarr1[i].Name + "_record.xml"))
                            {
                                fileName = (@"C:\" + netarr1[i].Name + "_record.xml");
                                fileName = fileName.Replace("\\", "/");
                                while (fileName.IndexOf("/") > -1)
                                {
                                    filePath += fileName.Substring(0, fileName.IndexOf("/") + 1);
                                    fileName = fileName.Substring(fileName.IndexOf("/") + 1);
                                }
                                byte[] fileNameByte = Encoding.ASCII.GetBytes(fileName);
                                if (fileNameByte.Length > 850 * 1024)
                                {
                                    return;
                                }

                                byte[] fileData = File.ReadAllBytes(filePath + fileName);
                                byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length];
                                byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length);

                                fileNameLen.CopyTo(clientData, 0);
                                fileNameByte.CopyTo(clientData, 4);
                                fileData.CopyTo(clientData, 4 + fileNameByte.Length);
                                clientSock.Connect(ipEnd);
                                clientSock.Send(clientData);
                                clientSock.Close();
                                recorded[j] = 0;
                                File.Delete(@"C:\" + netarr1[i].Name + "_record.xml");
                            }
                            else
                            {
                                UpdateNetwork_Interface();
                            }
                        }
                        catch (Exception ex)
                        {
                            LogEvent("No connection could be made because the target machine actively refused it", EventLogEntryType.Information);
                            break;
                        }
                        finally
                        {
                            j++;
                        }

                    }
                    else
                    {
                        UpdateNetwork_Interface();
                    }
                }
            }
        }
    }

Что мне нужно, чтобы сервер отключился или " Невозможно установить соединение, так как цельмашина активно отказалась: « отображается ... программа должна продолжить цикл и беспрепятственно перемещаться, пока сервер не подключится к сети и обновленный файл не будет отправлен на сервер.

1 Ответ

1 голос
/ 17 апреля 2011

Ну, вы обрабатываете исключение неисправно.Вы ловите (Exception ex) и распечатываете сообщение об ошибке, которое вы указали.Вполне возможно, что исключение ACTUALL связано с файлами, которые вы пишете и стираете.возможно, некоторые файлы не удалось стереть или открыть.

Глядя на код, я подозреваю, что проблема заключается в том, что вы фактически никогда не закрываете сокет, если есть исключение.

Вы должны добавитьследующее к пункту finally.

if (clientSocket!=null)
   clientSocket.Close();

И вы должны распечатать фактическое сообщение об исключении в журнале ошибок, чтобы вы знали, что действительно происходит при возникновении ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...