Calificación:
  • 6 voto(s) - 5 Media
  • 1
  • 2
  • 3
  • 4
  • 5
A nadie le importa una mierda, pero... v13
(12-30-2011, 01:34 PM)Reaper45 escribió:
(12-29-2011, 04:10 PM)chachibukai escribió: ¿Crear procesos hijo en linux? Visto. ¿En windows? Ni idea, a buscar.
¿Usar sockets en linux? Visto. ¿En windows? Ni idea, a buscar.
¿Comunicación entre procesos en linux? Visto. ¿En windows? Ni idea, a buscar.

Por aquí tengo el primer programa con sockets y multihilo que hice windows. Es una guarrada, pero fácil de entender. Échale un vistazo si quieres. Hay que linkearle al proyecto la librería libws2_32.a si usas un IDE basado en GCC o la ws2_32.lib si usas Visual Studio.

Spoiler: mostrar
Código:
/*By Reaper*/
#include <winsock.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio2.h>
#include <process.h>
#include <ctype.h>

int conectar(unsigned short puerto, char* ip);
void desconectar(void);
void chat(void);
void hilouno(void *param);
void hilodos(void *param);

SOCKET so;
char sw, telnet='0';

int main(int argc, char *argv[])
{
    textcolor(LIGHTGREEN);
    if(argc==3||argc==4)
    {
        if(argc==4&&strcmp(argv[3], "--modo-telnet")!=0)
        printf("Opci\242n no reconocida [%s]\n", argv[3]);
        else
        {
            if(argc==4&&strcmp(argv[3], "--modo-telnet")==0)
            telnet='1';
            printf("Conectando...\n");
            if(conectar(atoi(argv[2]), argv[1])!=0)
            printf("Error de conexi\242n");
            else
            {
                printf("Conexi\242n establecida!\n");
                chat();
                printf("[Fin de la transmisi\242n]");
            }
        }
    }
    else printf("Modo de uso: conectar.exe [IP] [puerto] --modo-telnet (opcional)\nTecla ESC: Desconectar\n");
}

int conectar(unsigned short puerto, char* ip)
{
    WSADATA wsadata;
    SOCKADDR_IN destino;
    WSAStartup(0x0202, &wsadata);
    if(wsadata.wVersion!=0x0202) WSACleanup();
    destino.sin_family=AF_INET;
    destino.sin_port=htons(puerto);
    destino.sin_addr.s_addr=inet_addr(ip);
    so=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    return connect(so, (SOCKADDR *)&destino, sizeof(destino));
}

void desconectar(void)
{
    if(so) closesocket(so);
    WSACleanup();
}

void chat(void)
{
    HANDLE handle[2];
    int i=0;
    handle[0]=(HANDLE) _beginthread(hilouno, 0, &i);
    i++;
    handle[1]=(HANDLE) _beginthread(hilodos, 0, &i);
    WaitForMultipleObjects(2, handle, FALSE, INFINITE);
}

void hilouno(void *param)
{
    char caracter=0;
    while(sw==0)
    {
        caracter=_getch();
        if(caracter!=27&&caracter!=13) if(telnet=='0') putchar(caracter);
        if(caracter==13)
        {
            caracter=10;
            if(telnet=='0') putchar('\n');
        }
        if(caracter==27)
        {
            desconectar();
            sw='1';
            _endthread();
        }
        else
        if(caracter!=0)
        send(so, &caracter, 1, 0);
    }
    desconectar();
    sw='1';
    _endthread();
}

void hilodos(void *param)
{
    char caracter2;
    int err=0;
    while(sw==0)
    {
        err=recv(so, &caracter2, 1, 0);
        if(err==1)
        putchar(caracter2);
        if(err==-1||err==0)
        {
            desconectar();
            sw='1';
            _endthread();
        }
    }
    desconectar();
    sw='1';
    _endthread();
}

Pues muchas gracias, así al menos tendré una referencia. De todos modos, estoy viendo que hay cosas como la preparación del socket que no se diferencia tanto de lo que vi en linux, así que lo que me han contado igual es algo exagerado.
[Imagen: SillyWalk.jpg] [Imagen: Bl3yK0h.png]x071
What a beautiful Duwang!


Mensajes en este tema
RE: A nadie le importa una mierda, pero... v13 - por Chachibukai - 12-30-2011, 03:27 PM
Imágenes raras - por Chachibukai - 01-30-2013, 09:16 PM
¡Loros, loros, loros! - por Chachibukai - 05-31-2013, 11:06 PM
RE: ¡Loros, loros, loros! - por Unmeikuro - 05-31-2013, 11:12 PM
Loros!!! - por Yumichan - 05-31-2013, 11:44 PM

Salto de foro:


Usuarios navegando en este tema: 74 invitado(s)