Java , Socket, sending messages -
i'm trying create multiplayer game, first want seek simple scanner , print code
i have 2 files, "cl.java" client , "server.java" server.
what trying ?
a client send message other client asking game initial message not run in code , thinking can not utilize clientthread.sendtext(un + " iwanttoplay"); outside class connectthread
what u think ?
the error happens on code:
public void sendtext(string text) { seek { oos.writeobject(text); } grab (ioexception e) { // todo auto-generated grab block e.printstacktrace(); } } with oos.writeobject(text);
this server.java
import java.io.ioexception; import java.io.inputstream; import java.io.objectinputstream; import java.io.objectoutputstream; import java.io.outputstream; import java.net.serversocket; import java.net.socket; import java.util.arraylist; public class server { serversocket serversocket; arraylist<serverthread> allclients = new arraylist<serverthread>(); public static void main(string[] args) { new server(); } public server() { // serversocket opened 1 time !!! seek { serversocket = new serversocket(6000); system.out.println("waiting on port 6000..."); boolean connected = true; // method block until client phone call me while (connected) { socket singleclient = serversocket.accept(); // add together list serverthread mythread = new serverthread(singleclient); allclients.add(mythread); mythread.start(); } // here close main server socket serversocket.close(); } grab (ioexception e) { // todo auto-generated grab block e.printstacktrace(); } } class serverthread extends thread { socket threadsocket; string msg; boolean isclientconnected; inputstream input; objectinputstream ois; outputstream output; objectoutputstream oos; // objectoutputstream public serverthread(socket s) { threadsocket = s; } public void sendtext(string text) { seek { oos.writeobject(text); } grab (ioexception e) { // todo auto-generated grab block e.printstacktrace(); } } public void run() { seek { input = threadsocket.getinputstream(); ois = new objectinputstream(input); output = threadsocket.getoutputstream(); oos = new objectoutputstream(output); // user name client , store // within thread class later utilize // msg = (string) ois.readobject(); msg = (string) ois.readobject(); (serverthread t : allclients) t.sendtext(msg); isclientconnected = true; system.out.println("connect ... "); // system.out.println(msg); // for(serverthread t:allclients) // t.sendtext("user has connected..."); // send info users // dos.writeutf(username + " has connected.."); // for(serverthread t:allclients) // t.sendtext(msg); while (isclientconnected) { seek { msg = (string) ois.readobject(); system.out.println(msg); (serverthread t : allclients) t.sendtext(msg); } grab (exception e) { } } // close resources (streams , sockets) ois.close(); oos.close(); threadsocket.close(); } grab (exception e) { // todo auto-generated grab block e.printstacktrace(); } } } }
this cl.java
import java.io.*; import java.net.socket; import java.net.unknownhostexception; import java.util.scanner; public class cl { public static final string host = "127.0.0.1"; public static final int port = 6000; static connectthread clientthread; boolean isconnected; static boolean isonline = false; static scanner scanner = new scanner(system.in); static string msg; static string un; static string op = "none"; static int turn = 1; public static void main(string[] args) { boolean running = true; system.out.print("enter username: "); united nations = scanner.nextline(); system.out.print("invite or wait ?"); msg = scanner.nextline(); if (msg.equalsignorecase("invite")) { system.out.print("enter opponent: "); op = scanner.nextline(); } new cl(); if (op.equalsignorecase("amjad")) { clientthread.sendtext(un + " iwanttoplay"); } } public string getword(string line,int i) { string arr[] = line.split(" ", 2); homecoming arr[i]; } public cl() { connectuser(); } public void connectuser() { clientthread = new connectthread(); clientthread.start(); } class connectthread extends thread { inputstream input; outputstream output; objectoutputstream oos; socket s; public void sendtext(string text) { seek { oos.writeobject(text); } grab (ioexception e) { // todo auto-generated grab block e.printstacktrace(); } } public void run() { seek { s = new socket(host, port); output = s.getoutputstream(); oos = new objectoutputstream(output); isonline = true; isconnected = true; new listenthread(s).start(); /* while (isonline) { msg = scanner.nextline(); clientthread.sendtext(un + ": " + msg); } */ } grab (unknownhostexception e) { // todo auto-generated grab block e.printstacktrace(); } grab (ioexception e) { // todo auto-generated grab block e.printstacktrace(); } } } class listenthread extends thread { socket s; inputstream input; objectinputstream ois; public listenthread(socket s) { this.s = s; seek { input = s.getinputstream(); ois = new objectinputstream(input); } grab (ioexception e) { // todo auto-generated grab block e.printstacktrace(); } } public void run() { while (isconnected) { seek { final string inputmessage = (string) ois.readobject(); string user; user = getword(inputmessage,1); string message = getword(inputmessage,2); /*if (!user.equals(un)) { system.out.println(inputmessage); }*/ if (message.equalsignorecase("iwanttoplay")) { system.out.println(user + " wants play, accept? y\n"); msg = scanner.nextline(); clientthread.sendtext(un + " " + msg); } else if (message.equalsignorecase("yesiwanttoplay")) { system.out.println(un + " accepted invitation, " + united nations + " against " + user); turn = 1; play(un,user); } else if (message.equalsignorecase("noidontwanttoplay")) { system.out.println(user + " denied invitation.. "); } else if (message.equalsignorecase("x") || message.equalsignorecase("o")) { system.out.println(user + " played .. " + message); turn = 1; play(un,user); } } grab (exception e) { // todo auto-generated grab block e.printstacktrace(); } } } } public void play(string me, string him) { if (turn == 1) { system.out.println("your turn,... play move..x or o .."); msg = scanner.nextline(); clientthread.sendtext(un + " " + msg); turn = 2; } } }
this error
exception in thread "main" java.lang.nullpointerexception @ cl$connectthread.sendtext(cl.java:68) @ cl.main(cl.java:38)
xception in thread "main" java.lang.nullpointerexception @ cl$connectthread.sendtext(cl.java:68)
you should able figure out yourself. line in question appears be
oos.writeobject(text); and oos null @ point.
you don't need stackoverflow sort out nullpointerexceptions.
java sockets client-server chat
No comments:
Post a Comment