문제

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.

도움이 되었습니까?

해결책

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

다른 팁

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>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top