jmetin2
Mensajes : 36 Fecha de inscripción : 20/02/2011 Edad : 27 Localización : Mexico, Yucatan, Merida
| Tema: Winsock en pasucal!!! Siii Funcionaaaa Dom Oct 23, 2011 9:57 pm | |
| Bueno amigos, Porfin!!!!!! Winsock, manejo de sockets, como lo quieren llamar
aqui esta la libreria con todas las funciones, mmmmm bueno solo son escribir y leer pero con eso ya tienes muchisimo!!
se las entrego
Code:
Privado:
Const AF_INET = 2 Const SOCK_STREAM = 1 Const errSoquet = &C4861000 Const INADDR_ANY = 0,Server=1,Client=0
Importar "Pauscal.prp" Estruc SOCKADDR, _ sin_family:Word, _ sin_port:Word, _ sin_addr:Entero, _ sin_zero[8]:Byte
Estruc WSAData, _ wVersion:Word, _ wHighVersion:Word, _ szDescription[257]:Byte, _ szSystemStatus[129]:Byte, _ iMaxSockets:Word, _ iMaxUdpDg:Word, _ lpVendorInfo:Entero
Estruc hostent, _ h_name:Entero, _ h_aliases:Entero, _ h_addrtype:Word, _ h_length:Word, _ @h_addr_list:Entero
Proc WSAStartup(wVersionRequired:Entero, Referencia lpWSAData:WSAData):EnteroSig, "ws2_32.dll" Proc WSACleanup():EnteroSig, "ws2_32.dll" Proc WSAGetLastError():EnteroSig, "ws2_32.dll"
Proc socket(AddressFamily:Entero, SocketType:Entero, Protocol:Entero):EnteroSig, "ws2_32.dll" Proc bind(s:Entero, Referencia addr:SOCKADDR, namelen:Entero):EnteroSig, "ws2_32.dll" Proc listen(s:Entero, backlog:Entero):EnteroSig, "ws2_32.dll" Proc accept(s:Entero, Referencia addr:SOCKADDR, Referencia addrlen:Entero):EnteroSig, "ws2_32.dll" Proc connect(s:Entero, Referencia addr:SOCKADDR, namelen:Entero):EnteroSig, "ws2_32.dll" Proc send(s:Entero, bufptr:Entero, llen:Entero, flags:Entero):EnteroSig, "ws2_32.dll" Proc recv(s:Entero, bufptr:Entero, llen:Entero, flags:Entero):EnteroSig, "ws2_32.dll" Proc closesocket(s:Entero):EnteroSig, "ws2_32.dll" Proc inet_addr(Referencia cp:Cadena):EnteroSig, "ws2_32.dll" Proc gethostbyname(nombre:Cadena):EnteroSig, "ws2_32.dll" Proc htons (hostshort:Entero):EnteroSig, "ws2_32.dll"
Proc ComplementoADos(Num:EnteroSig):EnteroSig Si Num > 32767 Num = Num - 1 Resultado = (-1)*(Num Xor 65535) SiNo Resultado = Num FinSi FinProc
Público:
Clase Sock
ClaseVar IP:Cadena ClaseVar Puerto:Entero ClaseVar Hilos:Entero Privado: ClaseVar Id:EnteroSig ClaseVar Type:Entero Público:
Proc Conectar():Booleano Var SockCli,Error,wVersionRequested:EnteroSig Var Sin:SOCKADDR Var wsaData:WSAData Si Puerto=0 Salir Si IP="" Salir wVersionRequested = 2*256+2 Error = WSAStartup(wVersionRequested, wsaData) Si Error 0 Salir FinSi Si (Lobyte(wsaData.wVersion) 2) Or (Hibyte(wsaData.wVersion) 2) WSACleanup Salir FinSi
SockCli = socket(AF_INET, SOCK_STREAM, 0) Si SockCli = errSoquet Error = WSAGetLastError() WSACleanup Salir FinSi Sin.sin_family = AF_INET Sin.sin_addr = inet_addr(IP) Sin.sin_port = ComplementoADos(htons(Puerto)) Si connect(SockCli, Sin, Long(Sin)) = errSoquet WSACleanup Resultado=Falso SiNo Resultado=Verd FinSi Id=SockCli Type=Client FinProc
Proc Escuchar():Booleano Var SockServer,Error,wVersionRequested,SonLen:Entero Var Sin,Son:SOCKADDR Var wsaData:WSAData Si puerto=0 Salir Si Hilos=0 Salir wVersionRequested = 2*256+2 WSAStartup(wVersionRequested, wsaData) SockServer = socket(AF_INET, SOCK_STREAM, 0) Sin.sin_family = AF_INET Sin.sin_addr = INADDR_ANY Sin.sin_port = ComplementoADos(htons(Puerto)) bind(SockServer, Sin, Long(Sin)) listen(SockServer, Hilos) SonLen=Long(Son) Id=Accept(SockServer,Son,SonLen) Si Id errSoquet Mensaje("Conexion establesida") Resultado=Verd Type=Server FinProc '-------------------------- Funciones Proc Leer(Tamaño:Entero):Cadena Var Ret:Entero Resultado=RepCarac(0,Tamaño) Ret=Recv(Id,CadPtr(Resultado),Tamaño,0) FinProc
Proc LeerEnt():Entero Recv(Id,Resultado@,Long(Resultado),0) FinProc
Proc Escribir(Texto:Cadena):Booleano Var Ret:Entero Ret=Send(Id,CadPtr(Texto),lstrlenptr(CadPtr(Texto)),0) Si Ret>0 Resultado=Verd FinProc
Proc Cerrar() closesocket(Id) WSACleanup FinProc
Privado: Destructor: Cerrar FinClase
Var Winsock:Sock | |
|