Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 13.02.2012
Сообщений: 83

Файлы по сокету приходят не полностью

25.04.2012, 12:48. Показов 723. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Клиент на сях отправляет серверу на пхп файл по сокету. Сервер принимает файл, но сохраняет его не полностью - байты теряются. Помогите решить мою проблемму, спасибо.
Вот мой сервер :
PHP
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
109
110
111
112
113
114
115
116
117
118
119
<?php
    header('Content-Type: text/plain;');
    error_reporting( E_ALL );
    
    clearstatcache();
    
    set_time_limit(0);
    ob_implicit_flush();
   
    echo "-= Server =-\n\n";
 
    $address = '62.152.35.61';
    $port    = 10001;
 
    try {
        
        echo 'Create socket ... ';
        if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
            throw new Exception('socket_create() failed: '.socket_strerror(socket_last_error())."\n");
        } else {
            echo "OK\n";
        }
        
        echo 'Bind socket ... ';
        if (($ret = socket_bind($sock, $address, $port)) < 0) {
            throw new Exception('socket_bind() failed: '.socket_strerror(socket_last_error())."\n");
        } else {
            echo "OK\n";
        }
 
        echo 'Listen socket ... ';
        if (($ret = socket_listen($sock, 5)) < 0) {
            throw new Exception('socket_listen() failed: '.socket_strerror(socket_last_error())."\n");
        } else {
            echo "OK\n";
        }
 
        do {
            echo 'Accept socket ... ';
            if (($msgsock = socket_accept($sock)) < 0) {
                throw new Exception('socket_accept() failed: '.socket_strerror(socket_last_error())."\n");
            } else {
                echo "OK\n";
            }
           
            $msg = "Hello, Client!";
            echo "Say to client ($msg) ... ";
            socket_write($msgsock, $msg, strlen($msg));
            echo "OK\n";
 
            do {
                echo 'Client said: ';
                
                if (false === ($buf = socket_read($msgsock, 2048))) {
                    throw new Exception('socket_read() failed: '.socket_strerror(socket_last_error())."\n");
                } else {
                        $buf_array = explode( "|" , $buf );
                    
                            if ( trim( $buf_array[0] ) == 'ADD' ) 
                                {
                                    file_put_contents( trim( $buf_array[1] ), trim( $buf_array[2] ) );
                                                                $fp = fopen('registry.txt', 'a');
                                                                fwrite($fp, $buf_array[1] . '|');
                                                                fclose($fp);
                                    
                                    $say = "ADDOK" ;
                                    echo "Say to client ( $say ) ... ";
                                    socket_write($msgsock, $say, strlen($say));
                                    echo "OK\n";
                                }
                        
                           if ($buf == 'GETLIST') 
                            {
                                $h = fopen("registry.txt","r"); 
                                                            while (!feof ($h)) {
                                                            $content = fgets($h);                                                                                                       
                                                              }
                                                              fclose($h);                                                         
                                                              $comm = "LIST|";
                                                              $request = $comm . $content;
                                                              socket_write($msgsock, $request, strlen($request) );  
                        
                               
                                                                            
 
                        }
                    else
                        {
                            
                            
                            echo "OK\n";
                        }
                }
               
                if (!$buf = trim($buf)) {
                    continue;
                }
               
                if ($buf == 'shutdown') {
                    socket_close($msgsock);
                    break 2;
                }
                
            } while (true);
           
        } while (true);
 
    } catch (Exception $e) {
        echo "\nError: ".$e->getMessage();
    }
   
    if (isset($sock)) {
   
        echo 'Close socket ... ';
        socket_close($sock);
        echo "OK\n";
   
    }
?>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.04.2012, 12:48
Ответы с готовыми решениями:

RSform Pro, данные на email приходят не полностью
Здравствуйте! Установил RsForm pro! Создал данные, поставил на сайт. Все прекрасно работает. Но приходить на e-mail тока: ...

Когда я передаю файлы через TClientSocket & TServerSocket мультимедийные файлы приходят битыми
Всем здравствуйте! В общем, я решил сделать удалённый захват экрана (не спрашивайте зачем) и столкнулся вот с такой проблемой. Я решил, что...

Подойдут ли вентиляторы от сокету 1150 к сокету 1151
Хочу собирать компьютер на сокете 1151 , но не вижу вентиляторов к такому процессору , подойдут ли вентиляторы к сокету 1150. И ещё вопрос...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.04.2012, 12:48
Помогаю со студенческими работами здесь

Вложенные Файлы Во Входящих Приходят Без Расширения.
Добрый день! Периодически сталкиваюсь с такой проблемой: вложенные файлы в письмах, приходящих из внешних доменов, приходят без...

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

Разделение проекта на файлы .cpp где полностью описывается один класс
Всем привет! Бьюсь над задачей: есть несколько классов, куча объявленных констант через #define и отдельные функции. Захотел все это...

Передача БД по сокету
Как передать БД(Access) с сервера(консоль) на клиент(Форма) по сокету?

Передача файлов по сокету
Здраствуйте. Я уже писала тему, но уже решила передачу сообщений через сокеты, сейчас делаю передачу файлов по сокетам. Примеров на с++...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru