hi have udp client server code not working ask general question "is shane kid"both codes have no errors come when run code outputs datagrampacket sendpacket = new datagrampacket(senddata, senddata.length, ipaddress, 9876); instead of letting client greet server. flow should server initializes , waits client--client greets server -- server asks question -- client responds question-- server tallies yes no votes , displays weather or not person =. advice on how round code out welcomed hear server code
import java.net.*; public class votingserver { //private static final int yes = 0; private static int yes2; public static void main(string[] args, int getrep) throws exception{ // part 1: initialization datagramsocket serversocket = new datagramsocket(9876); byte[] receivedata = new byte[1024]; byte[] senddata = new byte[1024]; inetaddress[] ipaddresslist = new inetaddress[5]; int[] portlist = new int[5]; // part 2: receive greeting clients (int i=0; i<1; i++) { datagrampacket receivepacket = new datagrampacket(receivedata, receivedata.length); serversocket.receive(receivepacket); string greeting = new string(receivepacket.getdata()); system.out.println("from client: " + greeting); ipaddresslist[i] = receivepacket.getaddress(); portlist[i] = receivepacket.getport(); } // (i) // part 3: broadcast votiong question clients string question = "is shane kid 1 yes 0 no?\n"; (int i=0; i<5; i++) { senddata = question.getbytes(); datagrampacket sendpacket = new datagrampacket(senddata, senddata.length); serversocket.send(sendpacket); // part 5: receive age of client (b) datagrampacket receivepacket = new datagrampacket(receivedata, receivedata.length); serversocket.receive(receivepacket); string agestr = new string(receivepacket.getdata()); yes2 = integer.parseint(agestr); ipaddresslist[i] = receivepacket.getaddress(); portlist[i] = receivepacket.getport(); // part 6: compute price (c) double count= 0; double no = 0; if (yes2 >= 1 ) count = 1; else if (yes2 <= 0 ) no = 1; // part 7: send price client string rep = null; string countstr = ""+count+"\n"; string nostr = ""+no+"\n"; if (no < count) rep = "is kid"; else if (no > count) rep = "is bad kid"; system.out.println(" "+getrep); senddata = countstr.getbytes(); senddata = nostr.getbytes(); senddata = rep.getbytes(); datagrampacket sendpacket1 = new datagrampacket(senddata, senddata.length); serversocket.send(sendpacket1); } // main() }} // udpserver
and here client code import java.io.; import java.net.;
public class clientvoting { public static void main(string[] args) throws exception { // part 1: initialization bufferedreader infromuser = new bufferedreader(new inputstreamreader(system.in)); datagramsocket clientsocket = new datagramsocket(); inetaddress ipaddress = inetaddress.getbyname("localhost"); byte[] senddata = new byte[1024]; byte[] receivedata = new byte[1024]; string sentence = infromuser.readline(); senddata = sentence.getbytes(); datagrampacket sendpacket = new datagrampacket(senddata, senddata.length, ipaddress, 9876); clientsocket.send(sendpacket); // part 2: receive question server datagrampacket receivepacket = new datagrampacket(receivedata, receivedata.length); clientsocket.receive(receivepacket); string question = new string(receivepacket.getdata()); system.out.println("from server:" + question); string yes2 = infromuser.readline(); senddata = yes2.getbytes(); datagrampacket sendpacket1 = new datagrampacket(senddata, senddata.length, ipaddress, 9876); clientsocket.send(sendpacket1); // part 4: price server receivepacket = new datagrampacket(receivedata, receivedata.length); clientsocket.receive(receivepacket); string rep = new string(receivepacket.getdata()); system.out.println("the answer " + rep); // part 4: close socket clientsocket.close(); } // main() } // class udpclient
thanks spf
i nullpointexception running code in server-side... there few problems in code itself. first 1 index of array attempt keep instance of clients connection. @ point, have one...
for (int i=0; i<1; i++) { datagrampacket receivepacket = new datagrampacket(receivedata, receivedata.length); serversocket.receive(receivepacket); string greeting = new string(receivepacket.getdata()); system.out.println("from client: " + greeting); ipaddresslist[i] = receivepacket.getaddress(); portlist[i] = receivepacket.getport(); } // (i)
however, @ point, code prone nullpointexception try iterate on 5 times...
string question = "is shane kid 1 yes 0 no?\n"; (int i=0; i<5; i++) { senddata = question.getbytes(); datagrampacket sendpacket = new datagrampacket(senddata, senddata.length); serversocket.send(sendpacket); <<<<---- npe prone code line...
here's result of running code...
from client: hello exception in thread "main" java.lang.nullpointerexception: null buffer || null address @ java.net.plaindatagramsocketimpl.send(native method) @ java.net.datagramsocket.send(datagramsocket.java:629) @ com.vasoftware.sf.common.votingserver.main(votingserver.java:38)
looking @ exception, noticed since buffer not null, address problem, since create new datagrampacket without both ip , port number of client connection... have pass them datagrampacket instance server knows client trying communicate... simple/basic example of trying achieve @ http://systembash.com/content/a-simple-java-udp-server-and-udp-client/. below initial fixing of code... answers still need work on buffer, leave exercise...
here's fixed code server accepts 1 client... leave multi-threaded stuff + data handler exercise...
import java.net.datagrampacket; import java.net.datagramsocket; import java.net.inetaddress; import java.util.arrays; public class votingserver { //private static final int yes = 0; private static int yes2; public static void main(string[] args) throws exception { // part 1: initialization datagramsocket serversocket = new datagramsocket(9876); byte[] receivedata = new byte[1024]; byte[] senddata = new byte[1024]; inetaddress ipaddresslist; int portlist = -1; // part 2: receive greeting clients system.out.println("ready receive connections @ port " + serversocket.getlocalport()); datagrampacket receivepacket = new datagrampacket(receivedata, receivedata.length); serversocket.receive(receivepacket); string greeting = new string(receivepacket.getdata()); system.out.println("from client: " + greeting); ipaddresslist = receivepacket.getaddress(); portlist= receivepacket.getport(); // part 3: broadcast votiong question clients string question = "is shane kid 1 yes 0 no?\n"; senddata = question.getbytes(); datagrampacket sendpacket = new datagrampacket(senddata, senddata.length, ipaddresslist, portlist); serversocket.send(sendpacket); // part 5: receive age of client (b) receivedata = new byte[1024]; receivepacket = new datagrampacket(receivedata, receivedata.length); serversocket.receive(receivepacket); string agestr = new string(receivepacket.getdata()); try { yes2 = integer.parseint(agestr); //<<<----- never value... leaving exercise.... } catch (numberformatexception nfe) { yes2 = 0; } receivepacket.getaddress(); receivepacket.getport(); // part 6: compute price (c) double count= 0; double no = 0; if (yes2 >= 1 ) count = 1; else if (yes2 <= 0 ) no = 1; // part 7: send price client // fixing code here well.... string rep = null; rep = no < count ? "is kid" : "is bad kid"; rep += " server count: " + count; senddata = rep.getbytes(); datagrampacket sendpacket1 = new datagrampacket(senddata, senddata.length, ipaddresslist, portlist); serversocket.send(sendpacket1); } }
here's client-side:
import java.io.bufferedreader; import java.io.inputstreamreader; import java.net.datagrampacket; import java.net.datagramsocket; import java.net.inetaddress; public class clientvoting { public static void main(string[] args) throws exception { // part 1: initialization bufferedreader infromuser = new bufferedreader(new inputstreamreader(system.in)); datagramsocket clientsocket = new datagramsocket(); inetaddress ipaddress = inetaddress.getbyname("localhost"); byte[] senddata = new byte[1024]; byte[] receivedata = new byte[1024]; system.out.print("what's question? "); string sentence = infromuser.readline(); senddata = sentence.getbytes(); system.out.println("attempting connect server @ port " + 9876); datagrampacket sendpacket = new datagrampacket(senddata, senddata.length, ipaddress, 9876); clientsocket.send(sendpacket); system.out.println("initial greeting sent... waiting response..."); // part 2: receive question server datagrampacket receivepacket = new datagrampacket(receivedata, receivedata.length); clientsocket.receive(receivepacket); string question = new string(receivepacket.getdata()); system.out.println("from server:" + question); string yes2 = infromuser.readline(); senddata = yes2.getbytes(); datagrampacket sendpacket1 = new datagrampacket(senddata, senddata.length, ipaddress, 9876); clientsocket.send(sendpacket1); // part 4: price server receivedata = new byte[1024]; receivepacket = new datagrampacket(receivedata, receivedata.length); clientsocket.receive(receivepacket); string rep = new string(receivepacket.getdata()); system.out.println("the answer " + rep); // part 4: close socket clientsocket.close(); } // main() }
you must execute server first, listen socket open on port 9876. then, can connect server client.
###### here's output in server-side... added few details of what's going on... ready receive connections @ port 9876 client: marcello ####### here's output of client: what's question? marcello attempting connect server @ port 9876 initial greeting sent... waiting response... server:is shane kid 1 yes 0 no? answer is bad kid server count: 0.0
as seems requirement design server can handle multiple clients , count on number of votes, recommend use multi-threaded version of server using different threads deal each client in own thread , update value of static counter (an example while(true) loop executing new runnable executor here http://java-x.blogspot.com/2006/11/java-5-executors-threadpool.html). think creating runnable instance described, , placing server's code in public void run() {} method implementation... leave exercise well...
Comments
Post a Comment