简体   繁体   中英

java-udp programming -sending message from server to the client

I made connection between server and client properly and i send message from client to the server,but how can i send messages from server to client.I mean how can i make server act like a client too.i tried to copy the client methods to the another class that server can invoke.but i couldnt then i tried to create a new package to use the client code in server class.any advices?

ps:Sorry about my english.

public class Entrance_Server extends JFrame{

JButton buton = new JButton("Create");
JButton buton2 = new JButton("Join");
JPanel butonpanel = new JPanel();
DatagramSocket sockServer = null;
DatagramSocket sockClient = null;
int port = 7777;
String s;
BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));



public Entrance_Server() {

    setLayout(new GridLayout(2,1));

    add(buton);
    add(buton2);

    buton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {

            Choosing c = new Choosing();
            c.start();

            System.out.println("Server socket created. Waiting for incoming data...");



        }
    });

    buton2.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            Choosing c = new Choosing();
            c.start();



        }
    });

}


public static void main(String[] args){

    Entrance_Server e = new Entrance_Server();
    e.setSize(500,350);
    e.setTitle("Welcome");
    e.setLocationRelativeTo(null);
    e.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    e.setVisible(true);

    e.connect();

}

public void connect (){

        try{
                sockServer = new DatagramSocket(7777);
                byte[] buffer = new byte[65536];
                DatagramPacket incoming = new DatagramPacket(buffer, buffer.length);

                while(true)
        {
            sockServer.receive(incoming);
            byte[] data = incoming.getData();
            String s = new String(data, 0, incoming.getLength());

            //echo the details of incoming data - client ip : client port - client message
            System.out.println(incoming.getAddress().getHostAddress() + " : " + incoming.getPort() + " - " + s);

            s = "OK : " + s;
            DatagramPacket dp = new DatagramPacket(s.getBytes() , s.getBytes().length , incoming.getAddress() , incoming.getPort());
            sockServer.send(dp);

            Entrance_Client_in_Server ec = new Entrance_Client_in_Server();
            ec.connectc();


        }
            }catch(IOException i){
                System.err.println("IOException " + i);
            }



}



}

On your client u need to wait on the server response by using socket.Receive()

You can identify a client after he has send a packet to the server like you are doing. You can then indentify the client like this: InetAddress address = packet.getAddress(); int port = packet.getPort(); InetAddress address = packet.getAddress(); int port = packet.getPort();

And use it to send a packet back to the client, which will read the response using the socket.Receive();

For further information about Client/Server connection using UDP DatagramSockets check Client-Server Datagram sockets

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM