//client 客户端 import wsock; import wsock.err; namespace wsock.udp class client { ctor(){ if(! ..wsock.open() ){ error( ( wsock.err.lasterr() ),2 ) } var hSocket= ..wsock.socket(0x2/*_AF_INET*/,0x2/*_SOCK_DGRAM*/,0x11/*_IPPROTO_UDP*/) if( hSocket= _INVALID_SOCKET ){ ..wsock.close() //关闭wsock error( ( wsock.err.lasterr() ),2 ) } ..table.gc(this,"close"); this.lastAddr = ..wsock.sockaddr_in(); this.hSocket = hSocket; }; bind = function(ip,port){ if( ip === null ) ip = ..wsock.getIp(); var service = ..wsock.sockaddr_in( ip,port : 0 ); service.sin_family = 0x2/*_AF_INET*/ if ..wsock.bind( this.hSocket,service,..raw.sizeof(service)) =-1/*_SOCKET_ERROR*/ { return null, ..wsock.err.lasterr() ; } return true; }; sendto = function(str,ip,port,flags){ var addr = ip === null ? this.lastAddr : ..wsock.sockaddr_in( ip,port,0x2/*_AF_INET*/); if(!addr) return; if ..wsock.sendto( this.hSocket,str,#str,flags : 0,addr,..raw.sizeof(addr)) =-1/*_SOCKET_ERROR*/ { return null,"发送数据失败" } this.lastAddr = addr; return true; }; recvfrom = function(len,ip,port,flags){ if(!len) len = 1024; var addr = ip === null ? this.lastAddr : ..wsock.sockaddr_in(ip,port,0x2/*_AF_INET*/); if(!addr) return; var reads,str = ..wsock.recvfrom( this.hSocket,len,len,flags : 0,addr,..raw.sizeof(addr)) if(reads>0) { this.lastAddr = addr; return ..string.left(str,reads); } }; connect = function(ip,port){ var addr = ip === null ? this.lastAddr : ..wsock.sockaddr_in( ip,port,0x2/*_AF_INET*/) if(!addr) error("请指定IP或端口地址",2); if ..wsock.connect( this.hSocket,addr,..raw.sizeof(addr)) =-1/*_SOCKET_ERROR*/ { return null,"连接服务端失败" } this.lastAddr = addr; return true; }; send = function(s,len,flag){ if(!owner.hSocket) return null,"tcp客户端已断开"; var bytes = ..wsock.send(owner.hSocket,s,len : #s,flag : 0 ); if( bytes == -1/*_SOCKET_ERROR*/ ) return null; return bytes; }; recv = function(size){ if(!size)size = owner.bufferSize; if(!owner.hSocket) return null,"tcp客户端已断开"; var reads,recvbuf = ..wsock.recv( owner.hSocket,size,size,0); if( reads>0 ) { if(reads