java - client server udp soket -


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