.net - VB.NET Listening Server is using max CPU -
i'm busy server -> client -> server software, client connects server , asking string, server responds back.
however, when multiple connections made, 4, cpu of computer raised 100%
here code.
imports system.net ' ipaddress imports system.net.sockets 'for tcplistener imports system.text module module1 dim serveport integer = 28960 dim requestcount integer dim bytesfrom(10024) byte dim datafromclient string dim sendbytes [byte]() dim serverresponse string dim rcount string sub main() dim serversocket new tcplistener(serveport) dim clientsocket tcpclient dim counter integer console.title = ("server") msg("starting server...") serversocket.start() msg("server started on port " & serveport) msg("") counter = 0 while (true) counter += 1 clientsocket = serversocket.accepttcpclient() if clientsocket.client.localendpoint.tostring = "127.0.0.1:28961" clientsocket.close() exit while end if msg("client " + clientsocket.client.localendpoint.tostring + " connected.") dim client new handleclinet dim networkstream networkstream = _ clientsocket.getstream() client.startclient(clientsocket, convert.tostring(counter)) end while clientsocket.close() serversocket.stop() console.readline() end sub sub msg(byval mesg string) mesg.trim() console.writeline(mesg) end sub public class handleclinet dim clientsocket tcpclient dim clno string public sub startclient(byval inclientsocket tcpclient, _ byval clineno string) me.clientsocket = inclientsocket me.clno = clineno dim ctthread threading.thread = new threading.thread(addressof dochat) ctthread.start() end sub private sub dochat() requestcount = 0 while (true) try requestcount = requestcount + 1 dim ip string = clientsocket.client.localendpoint.tostring dim networkstream networkstream = _ clientsocket.getstream() networkstream.read(bytesfrom, 0, cint(clientsocket.receivebuffersize)) datafromclient = system.text.encoding.ascii.getstring(bytesfrom) datafromclient = _ datafromclient.substring(0, datafromclient.indexof("$")) msg("<< " & datafromclient) rcount = convert.tostring(requestcount) if datafromclient.tolower = "hydra_ver" serverresponse = "0.94" else serverresponse = "unknown command" end if else serverresponse = "unknown command" end if sendbytes = encoding.ascii.getbytes(serverresponse) networkstream.write(sendbytes, 0, sendbytes.length) networkstream.flush() msg(">> " & serverresponse) catch ex exception end try end while end sub end class end module
wow.
you're opening , closing connections in forever loop?
make socket listener, handle stream events. c# i'm sure you've gotten used back-dating vbnet now.
public void portsocketlistener() { socket listensocket = new socket(addressfamily.internetwork, sockettype.stream, protocoltype.tcp); ipaddress hostip = (dns.resolve(ipaddress.any.tostring())).addresslist[0]; ipendpoint ep = new ipendpoint(hostip, 28961); listensocket.bind(ep); listensocket.listen(1); }
Comments
Post a Comment