Здравствуйте. Такая проблема: Вот пример клиента и сервера на чистом си с 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++ ибо нету и не будет визуал студии)
Да, вот простой пример родного плагина для 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 есть простые примеры на дельфи.
http://rapidshare.com/files/360332312/aimp_plugin.dll.html Не знаю, что конкретно должен делать бинарник, и вообще, нужен он в виде плагина или внешнего exe, этот просто выдает при воспроизведении месаджбокс. Положить его в директорию PlugIns и перезапустить AIMP, либо через меню Плагины загрузить его.
http://slil.ru/28758400 Вот плагин, который создает в папке с плеером файл SONGS.txt и туда пишет названия и исполнителей всех прослушанных песен (в unicode).
Дали же ссылку на msdn на функцию для установки хуков. Вот еще пример на чистом си: http://msdn.microsoft.com/en-us/library/ms644960%28VS.85%29.aspx
M.W.N.N., чего то я не вижу чтобы в клиенте принимались данные. sHELLO только объявляется и нигде не используется. конечно мусор будет выводится.
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’ Подскажите пож-та в чем проблема?
лежит int по смещению 0x56 Code: char* mychar; int myint=*((int*)&mychar[0x56]); - так работает (mov dword ptr) int myint=(int)mychar[0x56]; - так не работает (movsx byte ptr) как правильно сделать?
Почему не пашет декодер для функции, шифрующей все данные в файле c помощью побойтового логического отрицания? вот сам кодер и декодер ниже: http://pastebin.com/9c1xWBq3 декодер компилится, но валится в сегфолт(