Ir ao conteúdo
  • Cadastre-se

Daniel Bittencourt

Membro Pleno
  • Posts

    75
  • Cadastrado em

  • Última visita

Tudo que Daniel Bittencourt postou

  1. Bom eu não conheço a função, mas parece que não adiciona algarismos nulos, como vê aqui no código de exemplo quando fala para por 9 casas: https://www.cplusplus.com/reference/iomanip/setprecision/
  2. Bem, há um tempo atrás criei um projeto em c++ e criei o .exe. Passei esse .exe para um amigo e gerou vários arquivos típicos de projeto dev c++( os quais não me lembro o nome). Agora eu queria fazer um outro projeto mas o exe não vai ficar só comigo, quero passar para outras pessoas. Eu acho isso desses arquivos serem gerados nas outras máquinas bem estranho e gostaria de escondê-los, aproveitando dessa situação, gostaria saber também como as pessoas criam arquivos .exe e conseguem por fora de vista os sprites e tudo mais, sendo necessário usar vários processo para achar.
  3. vou dar uma conferida depois já volto para mostrar os resultados!!
  4. Bom dia!!! Eu estou instalando allegro 5 no meu ambiente de programação e quando faço: #include <allegro5/allegro.h> int main(){ } para testar, eis que me aparece isso: [Error] allegro5/platform/alplatf.h: No such file or directory bom, instintivamente, segui o caminho do arquivo não encontrado, pus em ordem alfabética e eis que me deparo com: o arquivo .h não existe, apenas um com mesmo nome sendo um CMAKE. o que eu faço? Nota: eu também olhei o arquivo que incluia o alplatf e o include estava assim: #include "allegro5/platform/alplatf.h" Nota 2: o jeito que estou instalando é simplesmente por as bibliotecas do allegro na pasta include da plataforma, onde já tem as bibliotecas normais c e c++. nota 3: eu pus // no include do alplatf e deram muitos erros, também tentei acrescentar o cmake dps do .h e deram outros erros.
  5. @Benjamin Breeg tem razão... eu acho melhor não arrumar uma gambiarra dessas, não tem necessidade... vou tentar instalar o 5 de uma vez
  6. @Ricardo_Nascimento não, um vetor é apenas uma forma mais fácil de se referir a algumas variáveis ou para declarar várias juntas. exemplo: int numero[40],valor=0; for(int conta=0;conta<40;conta++){ numero[conta]=valor; valor+=30; } você economiza um tempo do que fazer isso: int numero0=0,numero1 = 30,numero2 = 60,numero3 = 90,numero4 = 120,numero5 = 150.....numero40=1200; imagina escrever 40 declarações '-' no primeiro exemplo,a parte do int facilita na declaração e o for em se referir mais fácil com o "indíce'' da variável. esse ''indíce'' facilita muito em muitos casos. no caso de de um mdc de quatro números: mdc(mdc(num1,num2),mdc(num3,num4)); cinco numeros: mdc(mdc(mdc(num1,num2),num3),mdc(num4,num5)); seis: mdc(mdc(mdc(num1,num2),num3),mdc(mdc(num4,num5),num6)); obvio que no caso de muitos números é muito mais fácil fazer como o midori falou: //4 números int x = mdc(mdc(num1,num2),num3); int res = mdc(x,num4); //ou então assim, fácil de entender, mas maior: int x = mdc(num1,num2); int y = mdc(x,num3); int res = mdc(y,num4); //5 números, como eu faria: int x = mdc(num1,num2); int y = mdc(x,mdc(num3,num4)); int res = mdc(y,num5); dá para saber como prosseguir se precisar correto?
  7. bom,o compilador vai ver a 1 função e vai ver qual os dois números que vão ser os do calculo do mdc. então aí no primeiro número tem a função do mdc correto? então o valor do pimeiro número é o valor dessa função. porque essa fução também é um int , mas com parametros( os números que vão ser referencia para a função). então é a mesma coisa que por uma variavel int nesse lugar. Mas qual é o valor dessa função? É o valor de retorno. e qual é o valor de retorno? o mdc dos números dentro dos parenteses. Então basicamente quando o compilador ver o primeiro parametro, ele vê uma variável e olha o valor dessa variavel, que é o mdc dos dois primeiros números, depois disso olha o depois dessa 2 função e ve um numero. Então calcula o mdc dos dois primeiros com o terceiro. Resumo: a 1 função olha os valores que deve calcular o mdc o 1 valor é o retorno de outro mdc pega o resultado desse 2 mdc e a 1 função faz o mdc desse resultado com o outro número que recebeu, o num3. É meio difícil de explicar, espero que entenda
  8. @Benjamin Breeg basicamente o que eu quis dizer foi usar allegro para abrir uma imagem e saber a cor e posição de cada pixel dela. a parte de por a imagem na tela, eu deixo na WinApi32. Não vejo muita possibilidade de conflito, por que no código que eu quero por a tela cheia uso WinApi32 e Allegro 4 sem nenhum erro e com as duas bibliotecas funcionando bonitinhas. Se o conflito for as funções de bitmap da windows.h, já está resolvido, mudei de struct BITMAP da winapi32 para BiTMAP sempre que é dito. tirou as palavras da minha boca. Eu vou tentar arrumar um jeito de fazer o código funcionar Bom, provavelmente o motivo de ter gerado a janela pequena, bom não foi de eu ter deixado as medidas pequenas ou não definidas. Bem digamos que eu misturei o codigo que já vem pronto quando cria um projeto com allegro com o da janela. E eu tirei a parte de iniciar o gfx, mas... não tirei a parte que olhava se a variavel de retorno do gfx era igual a 0 para saber se ocorreu erro.. e nessa hora que olha o valor dela abria uma pequena messagebox e não deixava o programa prosseguir, por isso achei que a janela estava pequena. Basicamente fiz isso: // res = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0); if (res != 0) { allegro_message(allegro_error); exit(-1); } refiz o codigo( porque havia excluido), vi isso e concertei. Agora o programa pos o objetivo que era a linha na janela. Mas não uma, nem duas, nem três e sim muitas janelas. Porque gera isso, não sei, mas sei que se alguém testar o código basta clicar com o botão direito na janela na barra de tarefas, clicar em fechar todas, dar cntrl.+ shift + esc e descer tudo no gerenciador de tarefas e fechar a janela na primeira linha das janelas iguais assim: depois, cliquem em cancelar na janela de erro. por fim, o código: #include <allegro.h> #include <windows.h> void init(); void deinit(); static HWND sHwnd; static COLORREF blue=RGB(0,0,255); void SetWindowHandle(HWND hwnd) { sHwnd=hwnd; } void setPixel(int x,int y,COLORREF& color=blue) { if(sHwnd==NULL) { MessageBox(NULL,"sHwnd was not initialized !","Error",MB_OK|MB_ICONERROR); exit(0); } HDC hdc=GetDC(sHwnd); SetPixel(hdc,x,y,color); ReleaseDC(sHwnd,hdc); return; // NEVERREACH // } void drawLineBresenham(int xa, int ya, int xb, int yb) { int dx = abs(xa - xb), dy = abs(ya - yb); int p = 2 * dy - dx; int twoDy = 2 * dy, twoDyDx = 2 * (dy - dx); int x, y, xEnd; if (xa > xb) { x = xb; y = yb; xEnd = xa; } else { x = xa; y = ya; xEnd = xb; } setPixel(x, y); while(x < xEnd) { x++; if(p < 0) p += twoDy; else { y++; p += twoDyDx; } setPixel(x, y); } } void init() { int depth, res; allegro_init(); depth = desktop_color_depth(); if (depth == 0) depth = 32; set_color_depth(depth); install_timer(); install_keyboard(); install_mouse(); /* add other initializations here */ } void deinit() { clear_keybuf(); /* add other deinitializations here */ } LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) { init(); SetWindowHandle(hwnd); drawLineBresenham(20,30,90,50); deinit(); return DefWindowProc(hwnd,message,wParam,lParam); } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow) { static TCHAR szAppName[] = TEXT("Straight Line"); WNDCLASS wndclass; wndclass.style = CS_HREDRAW|CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; // Register the window // if(!RegisterClass(&wndclass)) { MessageBox(NULL,"Registering the class failled","Error",MB_OK|MB_ICONERROR); exit(0); } // CreateWindow // HWND hwnd=CreateWindow(szAppName,"Bresenham's Algorithm - Programming Techniques", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if(!hwnd) { MessageBox(NULL,"Window Creation Failed!","Error",MB_OK); exit(0); } // ShowWindow and UpdateWindow // ShowWindow(hwnd,iCmdShow); UpdateWindow(hwnd); // Message Loop // MSG msg; while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } /* return no error to the operating system */ return 0; }
  9. Eu tive uma ideia hoje para resolver esse problema: se eu criasse uma janela com a própria windows.h, que já vem no meu IDE, e então eu simplesmente uso algo parecido com: BITMAP *imagem = load_bitmap("img.bmp",NULL); for(int conta = 0; conta <=imagem->w;conta++){ for(int conta2 = 0; conta2<=imagem->h;conta2++){ int pixel = getpixel ( cara, 0, 0 ) ; int red = getr(pixel); int green = getg(pixel); int blue = getb(pixel); static COLOREFF color = RGB(red,green,blue); setPixel(color,conta,conta2); } } com setPixel escrevendo na janela criada com windows.h. O problema é a janela de windows.h ativada com allegro eu fiz um teste e a janela saiu minúscula e eu não entendo dessa parte de criar janelas. Seria possível fazer o que eu estou pensando? eu acho que o arquivo foi excluido.
  10. @Visitante: btião testei e funcionou perfeitamente... joguei nos 3 modos na mesma execução... e funcionou 100%
  11. Bom, eu precisava deixar a tela cheia, mas mostrando a barra de tarefas, por que sempre que pesquisou enche a tela inteira, e não deixa a barra de tarefas visível, tendo que fechar a janela para mudar de app.
  12. @Flávio Pedroza mt obrigado funcionou perfeitamente!!!!!
  13. Bom dia, eu estou fazendo um jogo online com c++ e allegro e bem... Quando eu vou testar (com somente 2 clientes) demora cerca de 2 minutos para andar 5 posições em cada cliente. isso ocorre porque os clientes ficam esperando receberem informação do server ,mas para ele enviar, o outro cliente tem que enviar primeiro e esse cliente só envia se estiver selecionado. Basicamente se eu quero andar em um dos clientes eu tenho que ficar pressionando a seta na direção que eu quero e trocar de janela rapidamente para rodar os clientes. isso chega a ser desgastante. alguém sabe um metódo de uma janela allegro (eu uso o tipo gfx) ser rodada sem estiver selecionada? bom eu consegui pôr um modo de se mover sem ter que esperar receber informações do servidor(com beginthread), mas o problema é que o server ainda espera receber para enviar, o que faz com que se você está com o jogo no plano de fundo, os outros players ficam sem receber as informações do server, o que quebra o jogo
  14. Bom, estou fazendo um programa em c++ com winsock 2, mas ocorrem vários erros em relação a winsock2, prinicpalmente em send() e recv(), então eu acredito que deveria usar uma biblioteca de terceiros(de programação tcp/ip) para facilitar. Alguém recomenda uma e consegue me ensinar a instalação? preciso que ensinem por que eu fiquei literalmente 11 meses tentando instalar allegro então não acho q vá conseguir instalar outra tão facilmente rsrs.
  15. bem, estou fazendo um programa em c++ utilizando o tcp/ip e estava funcionando até que o server começou a enviar uma informação para o cliente mas o mesmo não a recebe. vou por os trechos necessários aqui server.cpp WSADATA wsaData; int iResult; // pega alguns resultados que o client envia const char *sendbuf = "ha"; //bem, é usado como o vetor char do send SOCKET ListenSocket = INVALID_SOCKET; // socket para ouvir SOCKET ClientSocket = INVALID_SOCKET; // socket do 1 client SOCKET ClientSocket2 = INVALID_SOCKET; //socket do 2 client struct addrinfo *result = NULL; struct addrinfo hints; int iSendResult; char recvbuf[DEFAULT_BUFLEN]; int recvbuflen = DEFAULT_BUFLEN; int __cdecl main(void) { _beginthread(accepts,0,NULL); //accepts é onde ele vai aceitar os clients enquanto executa,se necessário int ix2,ix, iResult2; for(;;){ iResult = recv(ClientSocket, recvbuf, recvbuflen, 0); iResult2 = recv(ClientSocket2, recvbuf, recvbuflen, 0); printf("1:%i 2:%i recebido ",iResult, iResult2);//pus esses printf para ter noção de onde travava o programa ix2 = send(ClientSocket2, recvbuf, iResult, 0 ); printf("primeiro enviado"); ix = send(ClientSocket, sendbuf, iResult2, 0 ); Sleep(700); } // bem o programa do server recebe o x de dois clientes e manda o x de um para o outro{ x eh uma coordenada não tem y porque ainda não pus, vou trabalhar com apenas um antes de dois} e assim os dois clientes imprimem no y 40 e x pertencente ao programa o personagem dele( um ponto mesmo estou com preguiça) e no y 30 e x recebido do server outro ponto void accepts(void * ){ int g=0;// a variavel que vai mostrar quando for o cliente 2 e quando for o 1 for(;;){ // Initialize Winsock if(g==0){// se não tiver nenhum cliente ainda iResult = WSAStartup(MAKEWORD(2,2), &wsaData); ZeroMemory(&hints, sizeof(hints)); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; hints.ai_flags = AI_PASSIVE; // Resolve the server address and port iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result); ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol); iResult = bind( ListenSocket, result->ai_addr, (int)result->ai_addrlen); freeaddrinfo(result); iResult = listen(ListenSocket, SOMAXCONN); ClientSocket = accept(ListenSocket, NULL, NULL); closesocket(ListenSocket); g++;//mostrar que ja tem um cliente } else{ // se ja tiver um cliente aceito iResult = WSAStartup(MAKEWORD(2,2), &wsaData); ZeroMemory(&hints, sizeof(hints)); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; hints.ai_flags = AI_PASSIVE; iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result); ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol); iResult = bind( ListenSocket, result->ai_addr, (int)result->ai_addrlen); freeaddrinfo(result); iResult = listen(ListenSocket, SOMAXCONN); ClientSocket2 = accept(ListenSocket, NULL, NULL); closesocket(ListenSocket); } } } cliente.cpp void mgotoxy(int x, int y) { SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),(COORD) { x,y }); } int __cdecl main(int argc, char **argv) { WSADATA wsaData; SOCKET ConnectSocket = INVALID_SOCKET;// socket para acessar o server struct addrinfo *result = NULL, *ptr = NULL, hints; const char *sendbuf = "ha";// vetor de char usado para receber informações char recvbuf[DEFAULT_BUFLEN]; int iResult;// recebe alguns valores do server int recvbuflen = DEFAULT_BUFLEN; //algumas partes de conexão depois... printf("conectado"); int x=0,e,e2,x2=0;// x eh o x, e é a variavel que guarda o valor de x antes de andar para apagar a essa posição e2 eh para o x2(do outro cliente) e x2 eh o x do outro cliente Sleep(1000); for(;;){ e=x; e2=x2; iResult = send( ConnectSocket, sendbuf, x, 0 ); printf(" enviado"); printf("Bytes enviados: %d\n", iResult); x2 = recv(ConnectSocket, recvbuf, recvbuflen, 0); printf(" recebido");//ele não imprime recebido, então creio que trava na hora de receber if(GetAsyncKeyState(VK_RIGHT))x++; //movimentação do ponto if(GetAsyncKeyState(VK_LEFT))x--; mgotoxy(x,40);//escreve o ponto DESTE cliente printf("."); mgotoxy(e,40);//apaga o "rastro" DESTE cliente printf(" "); mgotoxy(x2,30);// escreve o outro cliente na tela deste printf("."); mgotoxy(e2,40); printf(" "); Sleep(700);// pausa um tempinho para não ficar muito frenético } bom se já verem o erro podem falar mas se precisarem do codigo inteiro me digam e eu passo daqui a pouquinho pois vou sair uns 5minutos para fazer uma caminhada
  16. eu só precisava de saber como fazer um vetor de sockets perguntinha rápida ah consegui valeu era só um erro bobo que eu não vi por causa da mensagem que não entendi e de um site q me confundiu valeu
  17. @arfneto entendi seria aqui? bom, não sei se pode dar errado, creio que sim, mas retirei esta parte que imprime o erro e funciona: if (argc != 2) { printf("usage: %s localhost\n", argv[0]); return 1; }
  18. @arfneto ah, mas eu estou executando no dev c++, por isso essa confusão, que eu saiba, não tem linha de comando nele, kkk
  19. cara se eu não tenho a menor ideia de onde trocar, como trocarei????? só me diga ONDE em qual PARTE do programa está isso!!!!!!!!!
  20. @arfneto eu precisava saber apenas onde escrevo localhost porque eu não acho!! é no printf???acho que não pois é o unico lugar que vi isso!! eu não estou brincando eu não sei onde devo substituir
  21. @arfneto eu já pensava isso na primeira vez que tentei há um tempo atrás, mas agora não pensei nisso, mas n sei onde ponho, pode me falar? creio eu q seja por aqui int __cdecl main(int argc, char **argv) { WSADATA wsaData; SOCKET ConnectSocket = INVALID_SOCKET; struct addrinfo *result = NULL, *ptr = NULL, hints; const char *sendbuf = "this is a test"; char recvbuf[DEFAULT_BUFLEN]; int iResult; int recvbuflen = DEFAULT_BUFLEN; // Validate the parameters if (argc != 2) { printf("usage: %s server-name\n", argv[0]); return 1; } eu tenho um pouco de dificuldade em entender esses códigos de outros, sou bem melhor em criar um para satisfazer uma vontade, mas para fazer isso preciso de uma base e para entender melhor o tcp/ip planejo usar isso de base
  22. @arfneto eu não fiz nada ai, só quero uma base com esse arquivo da microsoft, não escrevi isso, foi apenas retirado de lá https://docs.microsoft.com/en-us/windows/win32/winsock/complete-server-code
  23. bom, preciso criar um programa usando o tcp/ip para deixá-lo online, para ter uma boa base usei a documentação da microsoft e... bem o programa deu isso: alguém pode me expilcar? ahh e os códigos server.cpp #undef UNICODE #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <winsock2.h> #include <ws2tcpip.h> #include <stdlib.h> #include <stdio.h> // Need to link with Ws2_32.lib #pragma comment (lib, "Ws2_32.lib") // #pragma comment (lib, "Mswsock.lib") #define DEFAULT_BUFLEN 512 #define DEFAULT_PORT "27015" int __cdecl main(void) { WSADATA wsaData; int iResult; SOCKET ListenSocket = INVALID_SOCKET; SOCKET ClientSocket = INVALID_SOCKET; struct addrinfo *result = NULL; struct addrinfo hints; int iSendResult; char recvbuf[DEFAULT_BUFLEN]; int recvbuflen = DEFAULT_BUFLEN; // Initialize Winsock iResult = WSAStartup(MAKEWORD(2,2), &wsaData); if (iResult != 0) { printf("WSAStartup failed with error: %d\n", iResult); return 1; } ZeroMemory(&hints, sizeof(hints)); hints.ai_family = AF_INET; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; hints.ai_flags = AI_PASSIVE; // Resolve the server address and port iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result); if ( iResult != 0 ) { printf("getaddrinfo failed with error: %d\n", iResult); WSACleanup(); return 1; } // Create a SOCKET for connecting to server ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol); if (ListenSocket == INVALID_SOCKET) { printf("socket failed with error: %ld\n", WSAGetLastError()); freeaddrinfo(result); WSACleanup(); return 1; } // Setup the TCP listening socket iResult = bind( ListenSocket, result->ai_addr, (int)result->ai_addrlen); if (iResult == SOCKET_ERROR) { printf("bind failed with error: %d\n", WSAGetLastError()); freeaddrinfo(result); closesocket(ListenSocket); WSACleanup(); return 1; } freeaddrinfo(result); iResult = listen(ListenSocket, SOMAXCONN); if (iResult == SOCKET_ERROR) { printf("listen failed with error: %d\n", WSAGetLastError()); closesocket(ListenSocket); WSACleanup(); return 1; } // Accept a client socket ClientSocket = accept(ListenSocket, NULL, NULL); if (ClientSocket == INVALID_SOCKET) { printf("accept failed with error: %d\n", WSAGetLastError()); closesocket(ListenSocket); WSACleanup(); return 1; } // No longer need server socket closesocket(ListenSocket); // Receive until the peer shuts down the connection do { iResult = recv(ClientSocket, recvbuf, recvbuflen, 0); if (iResult > 0) { printf("Bytes received: %d\n", iResult); // Echo the buffer back to the sender iSendResult = send( ClientSocket, recvbuf, iResult, 0 ); if (iSendResult == SOCKET_ERROR) { printf("send failed with error: %d\n", WSAGetLastError()); closesocket(ClientSocket); WSACleanup(); return 1; } printf("Bytes sent: %d\n", iSendResult); } else if (iResult == 0) printf("Connection closing...\n"); else { printf("recv failed with error: %d\n", WSAGetLastError()); closesocket(ClientSocket); WSACleanup(); return 1; } } while (iResult > 0); // shutdown the connection since we're done iResult = shutdown(ClientSocket, SD_SEND); if (iResult == SOCKET_ERROR) { printf("shutdown failed with error: %d\n", WSAGetLastError()); closesocket(ClientSocket); WSACleanup(); return 1; } // cleanup closesocket(ClientSocket); WSACleanup(); return 0; } client.cpp #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <winsock2.h> #include <ws2tcpip.h> #include <stdlib.h> #include <stdio.h> // Need to link with Ws2_32.lib, Mswsock.lib, and Advapi32.lib #pragma comment (lib, "Ws2_32.lib") #pragma comment (lib, "Mswsock.lib") #pragma comment (lib, "AdvApi32.lib") #define DEFAULT_BUFLEN 512 #define DEFAULT_PORT "27015" int __cdecl main(int argc, char **argv) { WSADATA wsaData; SOCKET ConnectSocket = INVALID_SOCKET; struct addrinfo *result = NULL, *ptr = NULL, hints; const char *sendbuf = "this is a test"; char recvbuf[DEFAULT_BUFLEN]; int iResult; int recvbuflen = DEFAULT_BUFLEN; // Validate the parameters if (argc != 2) { printf("usage: %s server-name\n", argv[0]); return 1; } // Initialize Winsock iResult = WSAStartup(MAKEWORD(2,2), &wsaData); if (iResult != 0) { printf("WSAStartup failed with error: %d\n", iResult); return 1; } ZeroMemory( &hints, sizeof(hints) ); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; // Resolve the server address and port iResult = getaddrinfo(argv[1], DEFAULT_PORT, &hints, &result); if ( iResult != 0 ) { printf("getaddrinfo failed with error: %d\n", iResult); WSACleanup(); return 1; } // Attempt to connect to an address until one succeeds for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) { // Create a SOCKET for connecting to server ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol); if (ConnectSocket == INVALID_SOCKET) { printf("socket failed with error: %ld\n", WSAGetLastError()); WSACleanup(); return 1; } // Connect to server. iResult = connect( ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen); if (iResult == SOCKET_ERROR) { closesocket(ConnectSocket); ConnectSocket = INVALID_SOCKET; continue; } break; } freeaddrinfo(result); if (ConnectSocket == INVALID_SOCKET) { printf("Unable to connect to server!\n"); WSACleanup(); return 1; } // Send an initial buffer iResult = send( ConnectSocket, sendbuf, (int)strlen(sendbuf), 0 ); if (iResult == SOCKET_ERROR) { printf("send failed with error: %d\n", WSAGetLastError()); closesocket(ConnectSocket); WSACleanup(); return 1; } printf("Bytes Sent: %ld\n", iResult); // shutdown the connection since no more data will be sent iResult = shutdown(ConnectSocket, SD_SEND); if (iResult == SOCKET_ERROR) { printf("shutdown failed with error: %d\n", WSAGetLastError()); closesocket(ConnectSocket); WSACleanup(); return 1; } // Receive until the peer closes the connection do { iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0); if ( iResult > 0 ) printf("Bytes received: %d\n", iResult); else if ( iResult == 0 ) printf("Connection closed\n"); else printf("recv failed with error: %d\n", WSAGetLastError()); } while( iResult > 0 ); // cleanup closesocket(ConnectSocket); WSACleanup(); return 0; }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...