Русское сообщество по скриптингу

Как качать большие файлы?

Все вопросы по скриптингу для SourceMod, помощь в редактировании плагинов.
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптингу для SourceMod.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sp плагина.

Как качать большие файлы?

Сообщение Endi » 03 дек 2009, 13:24

Подключил модуль socket, и хотелось бы реализовать автообновлений серверной части. Необходимо качать файлы размером около 400кб, но плагин качает только 160-190кб.

Код: Выделить всё
public OnPluginStart(){
    
RegAdminCmd("ucp_update",update_func,ADMFLAG_BAN)
}

public 
Action:update_func(id,args){ //ucp_
    
CreateTimer(1.0,CreateSocket)
    return 
Plugin_Handled
}

public 
Action:CreateSocket(Handle:timer,any:id){
    new 
Handle:socket SocketCreate(SOCKET_TCP,OnSocketError);
    new 
Handle:hFile OpenFile("ucpsetup.exe","wb");
    
SocketSetArg(sockethFile);
    
SocketConnect(socket,OnSocketConnected,OnSocketReceive,OnSocketDisconnected,"download.ucp-anticheat.ru",80)
    return 
Plugin_Continue
}

public 
OnSocketConnected(Handle:socket,any:arg){
    
decl String:requestStr[1024];
    
Format(requestStr,sizeof(requestStr),"GET /%s HTTP/1.0\r\nHost: %s\r\nUser-Agent: UCP-Server\r\nAccept-Language: en-us,en;q=0.5\r\nAccept-Encoding: gzip,deflate\r\nKeep-Alive: 300\r\nConnection: keep-alive\r\n\r\n","ucpsetup.exe","download.ucp-anticheat.ru");
    
SocketSend(socket,requestStr,strlen(requestStr));
}

public 
OnSocketReceive(Handle:socketString:receiveData[], const dataSizeany:hFile) {
    
WriteFileString(hFile,receiveData,false);
}

public 
OnSocketDisconnected(Handle:socketany:hFile) {
    
CloseHandle(hFile);
    
CloseHandle(socket);
}

public 
OnSocketError(Handle:socket, const errorType, const errorNumany:hFile) {
    
LogError("socket error %d (errno %d)"errorTypeerrorNum);
    
CloseHandle(hFile);
    
CloseHandle(socket);


Что не так?
Аватара пользователя
Endi
 
Сообщения: 95
Зарегистрирован: 25 авг 2009, 11:26
Благодарил (а): 13 раз.
Поблагодарили: 20 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source

Re: Как качать большие файлы?

Сообщение DJ_WEST » 04 дек 2009, 00:25

А ты смотрел, чт ов результате сохранилось в ucpsetup.exe? Не уверен, что тебе нужно для записи использовать WriteFileString, тебе же надо бинарные данные записывать.
Не пишите мне в ЛС: если вам нужна помощь на бесплатной основе. Любые вопросы на форум.
Аватара пользователя
DJ_WEST
Администратор
 
Сообщения: 3641
Зарегистрирован: 22 авг 2009, 00:38
Благодарил (а): 48 раз.
Поблагодарили: 2209 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Left 4 Dead
Left 4 Dead 2


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5