[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. DiHWO

    DiHWO Member

    Joined:
    23 Oct 2009
    Messages:
    93
    Likes Received:
    10
    Reputations:
    0
    если есть ачат, зачем юзать гугл ))) сэнк за помощь
     
  2. qwert135

    qwert135 New Member

    Joined:
    22 Nov 2009
    Messages:
    53
    Likes Received:
    0
    Reputations:
    0
    Как скопировать содержимое текстового файла в нетипизированный
     
  3. BrainDeaD

    BrainDeaD Elder - Старейшина

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    как и любой другой. чрез файл стрим в с# и вообще .net. не знаю на каком языке ты прогаешь.
     
  4. qwert135

    qwert135 New Member

    Joined:
    22 Nov 2009
    Messages:
    53
    Likes Received:
    0
    Reputations:
    0
    На с++.Можешь пример привести?А то я в работе с файлами вообще ни бум бум:)
     
  5. BrainDeaD

    BrainDeaD Elder - Старейшина

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    пример для тхт и бинарника
    http://www.cplusplus.com/doc/tutorial/files/
     
  6. M.W.N.N.

    M.W.N.N. Member

    Joined:
    5 Jan 2009
    Messages:
    173
    Likes Received:
    78
    Reputations:
    6
    Здравствуйте.
    Такая проблема:
    Вот пример клиента и сервера на чистом си с tcp
    Сервер:
    Code:
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
     
    int main(void)
    {
      #define sHELLO "123"
      struct sockaddr_in stSockAddr;
      int i32SocketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
     
      if(-1 == i32SocketFD)
      {
        perror("Ne mogy sozdat socket");
        exit(EXIT_FAILURE);
      }
     
      memset(&stSockAddr, 0, sizeof(stSockAddr));
     
      stSockAddr.sin_family = PF_INET;
      stSockAddr.sin_port = htons(1111);
      stSockAddr.sin_addr.s_addr = INADDR_ANY;
     
      if(-1 == bind(i32SocketFD,(const void *)&stSockAddr, sizeof(stSockAddr)))
      {
        perror("Oshibka svazivaniya");
        close(i32SocketFD);
        exit(EXIT_FAILURE);
      }
     
      if(-1 == listen(i32SocketFD, 10))
      {
        perror("Oshibka proslushivaniya");
        close(i32SocketFD);
        exit(EXIT_FAILURE);
      }
     
      for(;;)
      {
        int i32ConnectFD = accept(i32SocketFD, NULL, NULL);
     
        if(0 > i32ConnectFD)
        {
          perror("Oshibka prinatya");
          close(i32ConnectFD);
          close(i32SocketFD);
          exit(EXIT_FAILURE);
        }
    
        // отправляем клиенту приветствие
        send(i32SocketFD, sHELLO, sizeof(sHELLO), 0);
         close(i32ConnectFD);
      }
      return 0;
    }
    
    Клиент
    Code:
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
     
    int main(void)
    {
      char sHELLO[20];
      struct sockaddr_in stSockAddr;
      int i32Res;
      int i32SocketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
      if(-1 == i32SocketFD)
      {
        perror("Oshibka ne mogy sozdat soket");
        exit(EXIT_FAILURE);
      }
     
      memset(&stSockAddr, 0, sizeof(stSockAddr));
     
      stSockAddr.sin_family = PF_INET;
      stSockAddr.sin_port = htons(1111);
      i32Res = inet_pton(PF_INET, "127.0.0.1", &stSockAddr.sin_addr);
     
      if(0 > i32Res)
      {
        perror("Pervii parametr ne otnositsa k kotegorii nor adresov");
        close(i32SocketFD);
        exit(EXIT_FAILURE);
      }
      else if(0 == i32Res)
      {
        perror("char string (Ne sodergit norm 2 ip");
        close(i32SocketFD);
        exit(EXIT_FAILURE);
      }
     
      if(connect(i32SocketFD, (const void *)&stSockAddr, sizeof(stSockAddr))==-1)
      {
        perror("oshibka soedineniya");
        close(i32SocketFD);
        exit(EXIT_FAILURE);
      }
       
      close(i32SocketFD);
      printf("\n%s\n",sHELLO);
      printf("\n");
      return 0;
    }
    
    Проблемы две:
    1)через переменную sHELLO отправляется строка "123" клиенту, но после отправки клиенту приходят вместо 123 - кракозябры.
    2)При повторной попытке запустить пишет: Address already in use
    В чем могут быть проблемы?

    Если кому не сложно и есть время приведите пример самого простого клиент серверного приложения на чистом си с udp

    Листинг из вики по udp не полон сервер
    Листинги из статьи Криса Касперски не компилятся(компилить пробовал под виндой на dev c++ ибо нету и не будет визуал студии)
     
  7. phpdreamer

    phpdreamer Member

    Joined:
    26 Jul 2009
    Messages:
    522
    Likes Received:
    86
    Reputations:
    19
    возможно ли узнать какой трек и группа проигрывается в аимп в данный момент?
    если да, то как?
     
  8. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    Да, вот простой пример родного плагина для AIMP на ассемблере (masm32):

    aimp_plugin.asm:
    Code:
          .486                      ; create 32 bit code
          .model flat, stdcall      ; 32 bit memory model
          option casemap :none      ; case sensitive
    
          include \masm32\include\windows.inc
          include \masm32\include\masm32.inc
          include \masm32\include\user32.inc
          include \masm32\include\kernel32.inc
          include \masm32\macros\macros.asm
          include \masm32\macros\windows.asm
    
          includelib \masm32\lib\masm32.lib
          includelib \masm32\lib\user32.lib
          includelib \masm32\lib\kernel32.lib
    
    
    AIMP_CallBack_Set=12+4  ;(dwCBType: DWORD; Proc: Pointer; User: DWORD): Boolean; stdcall;
    AIMP_CallBack_Remove=12+8 ;(dwCBType: DWORD; Proc: Pointer): Boolean; stdcall;
    AIMP_Status_Get=12+12       ;(StatusType: DWORD): DWORD; stdcall;
    
    AIMP_PLS_Info=12+32 ;(Index: Integer; out PLSInfo: TPLSInfo)
    AIMP_PLS_Count=12+36 ;word
    
    AIMP_GetCurrentTrack=12+60 ; dd ? ;(AInfo: PAIMP2FileInfo): Boolean; stdcall;
    
    AIMP_STS_STREAM_TYPE=39
    AIMP_STS_Player=4
    AIMP_PLAYER_STATE=11
    
    
    TAIMP2FileInfo STRUCT
        cbSizeOf dd ?
        nActive dd ?
        nBitRate dd ?
        nChannels dd ?
        nDuration dd ?
        nFileSize dd ?
        dd ?
        nRating dd ?
        nSampleRate dd ?
        nTrackID dd ?
        nAlbumLen dd ?
        nArtistLen dd ?
        nDateLen dd ?
        nFileNameLen dd ?
        nGenreLen dd ?
        nTitleLen dd ?
        sAlbum dd ?
        sArtist dd ?
        sDate dd ?
        sFileName dd ?
        sGenre dd ?
        sTitle dd ?
    TAIMP2FileInfo ENDS
    
    TPLSInfo STRUCT
        PLSName dd ?
        FileCount dd ?
        PLSDuration dd ?
        PLSSize dq ?
        PlaylistID dd ?
    TPLSInfo ENDS
    
    GetSongName PROTO :DWORD,:DWORD,:DWORD,:DWORD
    init2 proto :dword
    config proto :dword, :dword
    PlayFile proto :dword, :dword
    
    TAIMPAddonHeader STRUCT
       Version dd ?
       DllInstance dd ?
       GetPlgName dd ?
       GetAuthor dd ?
       Init dd ?
       Config dd ?
       Free dd ?
    TAIMPAddonHeader ENDS
    
    
    .data
    plugin2 TAIMPAddonHeader {0,0,offset get_plugin_name,offset get_author,offset init2,offset config,offset quit}
    
    plugin_name db "Test",0
    plugin_author db "(c) dx",0
    
    .data?
    hInstance dd ?
    FileInfo TAIMP2FileInfo {}
    AIMP dd ?
    PlayList TPLSInfo <>
    
    .code
    
    LibMain proc instance:DWORD,reason:DWORD,reserved:DWORD
      .if reason == DLL_PROCESS_ATTACH
    
        invoke GetModuleHandle,NULL
        mov hInstance,eax
    
        mov eax,1
      .endif
    ret
    LibMain ENDP
    
    
    
    AIMP_QueryAddon PROC
    mov eax,offset plugin2
    ret
    AIMP_QueryAddon ENDP
    
    
    get_plugin_name PROC
    mov eax,offset plugin_name
    ret
    get_plugin_name ENDP
    
    get_author PROC
    mov eax,offset plugin_author
    ret
    get_author ENDP
    
    
    
    config PROC Handle :DWORD, Win: DWORD
      xor eax,eax
    ret
    config ENDP
    
    
    
    init2 PROC, xAIMP :DWORD
      m2m AIMP,xAIMP
    
      push 0
      push offset PlayFile
      push AIMP_PLAYER_STATE
    
      mov eax,AIMP
      push eax
      mov eax,[eax]
      call dword ptr [eax+AIMP_CallBack_Set]
    
      xor eax,eax
    ret
    init2 ENDP
    
    
    
    PlayFile PROC User :DWORD, cType :DWORD
    LOCAL stitle [512] :BYTE
    LOCAL sartist [512] :BYTE
    
      .if cType!=AIMP_PLAYER_STATE
        jmp ext
      .endif
    
      push AIMP_STS_Player
      mov eax,AIMP
      push eax
      mov eax,[eax]
      call dword ptr [eax+AIMP_Status_Get]
    
      cmp eax,1
      jne ext
    
      push AIMP_STS_STREAM_TYPE
      mov eax,AIMP
      push eax
      mov eax,[eax]
      call dword ptr [eax+AIMP_Status_Get]
    
      test eax,eax
      jne ext
    
      invoke RtlZeroMemory,addr sartist,512
      invoke RtlZeroMemory,addr stitle,512
      invoke RtlZeroMemory,offset FileInfo,88
    
      mov FileInfo.cbSizeOf,88
    
      lea eax,stitle
      mov FileInfo.sTitle,eax
      mov FileInfo.nTitleLen,126
    
      lea eax,sartist
      mov FileInfo.sArtist,eax
      mov FileInfo.nArtistLen,512
    
      push offset FileInfo
      mov eax,AIMP
      push eax
      mov eax,[eax]
    
      call dword ptr [eax+AIMP_GetCurrentTrack]
    
      invoke MessageBoxW,0,addr stitle,addr sartist,0
    
    ext:
    xor eax,eax
    ret
    PlayFile ENDP
    
    quit PROC
      xor eax,eax
    ret
    quit ENDP
    
    end LibMain
    
    aimp_plugin.def:
    Code:
    LIBRARY aimp_plugin
    EXPORTS AIMP_QueryAddon
    
    А вообще, в aimp sdk есть простые примеры на дельфи.
     
  9. phpdreamer

    phpdreamer Member

    Joined:
    26 Jul 2009
    Messages:
    522
    Likes Received:
    86
    Reputations:
    19
    к сожелению, ни асма ни делфи не знаю
    мне бы бинарник подошел
     
  10. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    http://rapidshare.com/files/360332312/aimp_plugin.dll.html
    Не знаю, что конкретно должен делать бинарник, и вообще, нужен он в виде плагина или внешнего exe, этот просто выдает при воспроизведении месаджбокс. Положить его в директорию PlugIns и перезапустить AIMP, либо через меню Плагины загрузить его.
     
  11. phpdreamer

    phpdreamer Member

    Joined:
    26 Jul 2009
    Messages:
    522
    Likes Received:
    86
    Reputations:
    19
    желательно записывать название трека и группы в файл....
    плагин или exe - без разницы
     
  12. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    http://slil.ru/28758400
    Вот плагин, который создает в папке с плеером файл SONGS.txt и туда пишет названия и исполнителей всех прослушанных песен (в unicode).
     
    1 person likes this.
  13. M.W.N.N.

    M.W.N.N. Member

    Joined:
    5 Jan 2009
    Messages:
    173
    Likes Received:
    78
    Reputations:
    6
    Ну так что, ктонить знает ответ на мой вопрос?
     
  14. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    Дали же ссылку на msdn на функцию для установки хуков. Вот еще пример на чистом си:
    http://msdn.microsoft.com/en-us/library/ms644960%28VS.85%29.aspx
     
  15. M.W.N.N.

    M.W.N.N. Member

    Joined:
    5 Jan 2009
    Messages:
    173
    Likes Received:
    78
    Reputations:
    6
    Я про 4971 пост.
    За хуки спс большое.
     
  16. t4Nk

    t4Nk Elder - Старейшина

    Joined:
    23 Sep 2007
    Messages:
    70
    Likes Received:
    33
    Reputations:
    0
    M.W.N.N., чего то я не вижу чтобы в клиенте принимались данные. sHELLO только объявляется и нигде не используется. конечно мусор будет выводится.
     
  17. M.W.N.N.

    M.W.N.N. Member

    Joined:
    5 Jan 2009
    Messages:
    173
    Likes Received:
    78
    Reputations:
    6
    Code:
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <string.h>
    #include <unistd.h>
    #include <stdio.h>
    
    int main() {
    struct sockaddr_in server, client={AF_INET,INADDR_ANY,INADDR_ANY};
    memset(&server,0,sizeof(server));
    server.sin_family=AF_INET;
    server.sin_port=htons(1212);
    server.sin_addr.s_addr=inet_addr("127.0.0.1");
    
    int sock;
    sock=socket(PF_INET,SOCK_DGRAM,0);
    bind(sock,(sockaddr *) & client,sizeof(client));
    
    char buf[81];
    memset(buf,0,81);
    strcpy(buf,"request");
    sendto(sock,&buf,strlen(buf),0,(sockaddr *)&server,sizeof(server));
    memset(buf,0,81);
    recvfrom(sock,buf,80,0,NULL,0);
    puts(buf);
    
    return 0;
    }
    
    Code:
    laptop:~/C/tc$ gcc -o udpcl udpcl.c
    udpcl.c: In function ‘main’:
    udpcl.c:18: error: ‘sockaddr’ undeclared (first use in this function)
    udpcl.c:18: error: (Each undeclared identifier is reported only once
    udpcl.c:18: error: for each function it appears in.)
    udpcl.c:18: error: expected expression before ‘)’ token
    udpcl.c:18: error: too few arguments to function ‘bind’
    udpcl.c:23: error: expected expression before ‘)’ token
    udpcl.c:23: error: too few arguments to function ‘sendto’
    
    Подскажите пож-та в чем проблема?
     
  18. 4p3

    4p3 Elder - Старейшина

    Joined:
    18 Aug 2008
    Messages:
    142
    Likes Received:
    30
    Reputations:
    0
    http://rsdn.ru/article/unix/sockets.xml
     
  19. zeppe1in

    zeppe1in Elder - Старейшина

    Joined:
    12 Jul 2006
    Messages:
    343
    Likes Received:
    66
    Reputations:
    18
    лежит int по смещению 0x56

    Code:
    char* mychar;
    
    int myint=*((int*)&mychar[0x56]); - так работает
    (mov dword ptr)
    
    int myint=(int)mychar[0x56]; - так не работает
    (movsx byte ptr)
    как правильно сделать?
     
  20. $n@ke

    $n@ke Elder - Старейшина

    Joined:
    18 Sep 2006
    Messages:
    696
    Likes Received:
    404
    Reputations:
    134
    Почему не пашет декодер для функции, шифрующей все данные в файле c
    помощью побойтового логического отрицания? вот сам кодер и декодер ниже:

    http://pastebin.com/9c1xWBq3

    декодер компилится, но валится в сегфолт(
     
Thread Status:
Not open for further replies.