Question

I'm trying to make a chat application in java, but I had a problem, when I couldn't send to another machine. Here's part of my codes:

This is my class client:

public class EnvioSocket {
    public static boolean enviarSocket(String nome, String ip, int porta,
        String mensagem) {
        String dados = nome + " : " + mensagem;
        try {
            Socket socket = new Socket(ip, porta);
            OutputStream outToServer = socket.getOutputStream();
            DataOutputStream out = new DataOutputStream(outToServer);
            out.writeUTF(dados);
            out.close();
            socket.close();

        } catch (UnknownHostException e) {
            JOptionPane.showMessageDialog(null, e.getMessage());
            return false;
        } catch (IOException e) {
           JOptionPane.showMessageDialog(null, e.getMessage());
           return false;
        }
        return true;
   }

}

This is my class server:

public class ServidorThread implements Runnable {
    private JTextArea menssage;

    public ServidorThread(JTextArea menssage) {
        this.menssage = menssage;
    }
    @Override
    public void run() {
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(Porta.PORTA);
            while (true) {
                Socket acceptedSocket = serverSocket.accept();
                DataInputStream in = new DataInputStream(
                    acceptedSocket.getInputStream());
                String menssage = in.readUTF();
                this.menssage.append(DateUtils.dateToString(new Date(), "dd/MM/yyyy HH:mm") + " " + menssage + "\n");
                in.close();
                acceptedSocket.close();
            }
        } catch (IOException e) {
        JOptionPane.showMessageDialog(null, e.getMessage());
        }
    }
}



define a port to socket
public final class Porta {
    private Porta() {
    }

    public static final int PORTA = 6066;
} 

I can only send a message to my own computer. How can I fix this? I'm starting my thread inside of my class that make a GUI.

Was it helpful?

Solution

It looks like you've set up your Server right, but your client doesn't seem to ever connect to it. You need to create a socket which will connect to the server socket. This socket can then give you I/O streams to send data through.

Java's tutorial, complete with code examples

OTHER TIPS

The question is not that simple to me...I can show you the basics for client server echo application in java...You can expand on that to make a chat session between to clients I suppose...here it goes...

public class MultiThreadServer implements Runnable {

Socket csocket;
private static boolean quitFlag = false;

MultiThreadServer(Socket csocket) {
    this.csocket = csocket;
}

public static void main(String args[]) throws Exception {
    ServerSocket ssock = new ServerSocket(1234);
    System.out.println("Listening");

    while (!quitFlag) {
        Socket sock = ssock.accept();
        System.out.println("Connected");
        new Thread(new MultiThreadServer(sock)).start();
     }
}

public void run() {
    try {

        BufferedReader in = new BufferedReader(new InputStreamReader(csocket.getInputStream()));

        String action = in.readLine();

        PrintStream pstream = new PrintStream(csocket.getOutputStream());
        System.out.printf("Server received... " + action + " ...action\n");
        switch (action) {
            case "bottle":
                for (int i = 3; i >= 0; i--) {
                    pstream.println("<p>" + i + " bottles of beer on the wall" + "</p>");
                }
                pstream.println("<p>" + action + "</p>");

                break;
            case "echo":
                pstream.println("<p>" + action + "</p>");
                break;
            case "quit":
                quitFlag = true;
                break;
        }
        pstream.close();
        csocket.close();
    } catch (IOException e) {
        System.out.println(e);
    }
  }
}

Running the server to echo your response is easy...making the client or clients are more challenging...simple jsp Client..

<BODY>
    <H1>Creating Client/Server Applications</H1>


    <% 
    String serverInput = request.getParameter("serverInput");
    //String serverInput = "bottle";   


    try{
        int character;
        Socket socket = new Socket("127.0.0.1", 1234);

        InputStream inSocket = socket.getInputStream();
        OutputStream outSocket = socket.getOutputStream();

        String str = serverInput+"\n";
        byte buffer[] = str.getBytes();
        outSocket.write(buffer);

        while ((character = inSocket.read()) != -1) {
            out.print((char) character);
        }

        socket.close();

    }
    catch(java.net.ConnectException e){
    %>
        You must first start the server application 
        at the command prompt.
    <%
    }
    %>
</BODY>

or better yet...

     <body>
        <%String name = request.getParameter("inputString");%>
        <h1>Creating Client Applications</h1>

        <p>Client Sent... <%=name%> ...to Server</p>

    <% 
    //String serverInput = "bottle";   


    try{
        int character;
        Socket socket = new Socket("127.0.0.1", 1234);


        OutputStream outSocket = socket.getOutputStream();

        String str = name;
        byte buffer[] = str.getBytes();
        outSocket.write(buffer);


        socket.close();

    }
    catch(java.net.ConnectException e){
    %>
        You must first start the server application 
        at the command prompt.
    <%
    }
    %>




    </body>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top