Anet networking module for android
Monkey Forums/User Modules/Anet networking module for android
| ||
http://code.google.com/p/anet-module/ Current Version: v1.40 EDIT: Now also includes UDP!! (v1.10) EDIT2: Added multithreading support for server receive methods (v1.20) EDIT3: Added ReadLine and WriteLine methods (v1.30) EDIT4: Fixed bugs in BindSocket, UDP server is now working! (v1.40) Included is the following functions (a la blitzmax) This will be familiar to some of you ;) Network functions, also introducing WriteBytes and Readbytes BindSocket:Bool(port:Int) CloseSocket:Void() ConnectSocket:Bool(remoteIP:String, remotePort:Int) CreateTCPSocket:Bool() CreateUDPSocket:Bool() FlushStream:Void() HostIp:String(hostname:String) HostIps:String[](hostname:String) HostName:String(hostIP:String) SocketAccept:Bool(timeout:Int = 0) SocketConnected:Bool() SocketLocalIP:String() SocketLocalPort:Int() SocketReadAvail:Int() SocketRemoteIP:String() SocketRemotePort:Int() ReceiveUDP:Bool() ReadByte:Int() ReadBytes:Int[](offset:Int, length:Int) ReadInt:Int() ReadLine:String() ReadString:String(length:Int) WriteByte:Int(outbyte:Int) WriteBytes:Int(outbytes:Int[], offset:Int, length:Int) WriteLine:Int(line:String) WriteInt:Int(integer:Int) WriteString:Int(text:String) _data:Int[] _offset:Int _length:Int _ip:String _port:Int Documentation: BindSocket:Bool(port:Int) Returns true if socket binds to local port Closesocket:Void() Close socket ConnectSocket:Bool(remoteIP:String, remotePort:Int) Returns true if socket is connected successfully CreateTCPSocket:Bool() Returns true if tcp socket is created successfully Method FlushStream:Void() Writes remaining bytes (if any) from buffer to output stream HostIp:String(hostname:String) Returns ip address as string HostIps:String[](hostname:String) Returns ip addresses as string array HostName:String(hostIP:String) Returns hostname as string SocketAccept:Bool(timeout:Int = 0) Listens to socket, and returns true if a connection is accepted. SocketConnected:Bool() Returns true if socket is connected SocketLocalIP:String() Returns local ip address as string SocketLocalPort:Int() Returns local port as int SocketReadAvail:Int() Returns number of bytes which can be read from the stream without causing the socket to block, or 0 if none. SocketRemoteIP:String() Returns remote ip address as string SocketRemotePort:Int() Returns remote port as int ReceiveUDP:Bool() Receive a UDP packet from the bound socket. The packet data is stored in the _data[] field The length of the data is stored in the _length field The ip address of the sender is stored in the _ip field The port of the sender is stored in the _port field ReadByte:Int() Read a byte from stream ReadBytes:Int[](offset:Int, length:Int) Read a byte array from stream ReadInt:Int() Read a integer from stream ReadLine:String() Read a line of text from stream ReadString:String(length:Int) Read a string from stream WriteByte:Int(outbyte:Int) Write a byte to stream WriteBytes:Int(outbytes:Int[], offset:Int, length:Int) Write a byte array to stream WriteInt:Int(integer:Int) Write a integer to stream WriteLine:Int(line:String) Write a line of text to stream WriteString:Int(text:String) Write a string to stream All functions that return ints return -2 on error All write methods are valid for UDP, for reading; use ReceiveUDP() instead. All tested and working ok :) |
| ||
Cool, will have to try this at some point, thanks! |
| ||
no problem ;) |
| ||
I've added UDP support in the latest version |
| ||
nwe version again |
| ||
Is this still being developped ? |
| ||
Not at the moment. Do you see the need of any enhancements? |
| ||
Not at all but i was looking to see what have been done here :) from what it look what you did seem rather easy to work with. Cause i will have to look soon into networking and i dunno if i should head with pubnub or sockets.. |
| ||
For what's been done, check out the changelog at http://code.google.com/p/anet-module/wiki/ChangeLog |
| ||
Hey Sub_Zero, have you ever gotten around to testing UDP servers in ANet? All tested except for server functions (My emulator wouldn't give me a local address), any feedback here is appreciated. ;) I ran the UDP client example, and it works perfectly with my own socket library(For Windows). However as you said, ANet seems to have trouble getting the IP address of the tablet I'm using. The TCP examples work without an issue(Though I've only tested the TCP server with Monkey's TcpStream class), but the UDP server doesn't seem to be able to find an IP address. So do you know what the problem is, and if so, can you fix it? If you're not sure, I may end up editing it myself, but I'd rather not mess with the 'official' version of the module. |
| ||
Can this be expanded for iOS, HTML5, and other monkey-compatible platforms? Or is similar functionality already available for those? If already available, can these mods all be combined so we have one API for all? |
| ||
If you're referring to ANet, then not without rewriting it quite a bit(It's Java based). My library on the other hand is C++ based, so it could technically run on most of Monkey's platforms with the right libraries/versions of libraries, and a bit of work. However, if you want to throw a bunch of libraries/modules together, you could always implement separate modules for the different platforms, then make a few identical wrappers. And though I haven't looked into it very much, I'm pretty sure the HTML5 target would be forced to use TCP sockets, and not be able to host servers. iOS seems more likely, but I'm not much of an Objective C guy, and I don't really have an 'i' device. I have no idea about Sub_Zero though. So in conclusion, it is possible, but we'd need a good team for it, or someone who's really dedicated. But, if you want good enough functionality, and only TCP sockets, Ferdi ported "Push Button" to Monkey recently. By the way, does Sub_Zero even come on these days? |
| ||
Hey all Thanks for the replies, I haven't been around here much lately, but now I'm finally here. @Sonickidnextgen: Thanks for testing. I will have a look at the ip stuff to see if i can get it sorted. @c.k.: Ofcourse it can be done on other platforms, unsure about html5 though. As for iOS i have the same problem as Sonickidnextgen, i have no i-devices. |
| ||
OK.... Anet v1.40 is now up! I've fixed the UDP server now. The problem was that android breaks at getting the correct ip where regular java programs don't. I had to apply a fix for the problem :) Happy coding folks :) |
| ||
Thanks Sub_Zero, now I won't have to worry about editing it for my projects. But after looking into it, when I use "SocketLocalIP()", it gives me the integer IP address converted into a string, but its byte order is reversed. Was this intentional, or is this a bug? EDIT: I tested it a bit more, and it worked normally on an actual device, so I'm not sure if this is a bug or not. |
| ||
I've no use for this yet, but good to know someone has done the hard work :) |
| ||
@Sonickidnextgen: Sounds like the emulator has a bug regarding SocketLocalIP() |
| ||
Yeah, I'm pretty sure that was the case. |