я хочу отправить и получить сообщение с сокетом - PullRequest
0 голосов
/ 26 октября 2019

Я хочу, чтобы программный код (клиент) мог отправлять сообщение серверу, но java-код, который клиент может подключить к серверу с публичным IP-адресом маршрутизатора, но он не отправляет сообщение, яне знаю почему (¯ (° _o) / ¯). После того, как сервер получит сообщение от другой программы (клиента), он сможет отправить еще одно сообщение программе, которая отправит ему сообщение (клиент), не закрывая сокет или используя ip клиента. Я делаю рисунок, который может объяснить, что я хочу сделать. enter image description here это его код для клиента

try {
                handler.post( new Runnable() {

                    @Override


                    public void run() {
                        Toast.makeText(getApplicationContext(),"start client", Toast.LENGTH_LONG).show();
                    }
                } );
                WifiManager manager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
                ip = Formatter.formatIpAddress(manager.getConnectionInfo().getIpAddress());
                String mess = h[0];
                String messag_send=(mess+"<ip>"+ip);


                sock = new Socket( "public ip router", 1234 );


                printWriter = new PrintWriter( sock.getOutputStream() );

                printWriter.write(messag_send);
                printWriter.flush();
                printWriter.close();
                dis = new DataInputStream(sock.getInputStream());
                final String message_entrant21;

                message_entrant21 = dis.readLine();
                Message232 = message_entrant21;



                String line = "no";


            } catch (UnknownHostException e) {
                e.printStackTrace();

            } catch (IOException e) {
                e.printStackTrace();
            }

и serveur

import socket
import datetime
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
while True:
    host, port = ('',1234)


    o=False
    while o==False:
        try:
            socket.bind((host, port))
            print("le serveur est démarré! o = true")
            o=True
        except OSError:
            o=False
        finally:
            if(o is not False):
                o=True

    socket.listen(5)
    conn, adress = socket.accept()
    print("listening")


    response = client.recv(255)
    trys=0
    while o==False:
        try:
            socket.sendto(bytes(b'hello you are connected'),conn, adress)
            print("le serveur est démarré! o = true")
            o=True
        except OSError:
            o=False
            if(trys==10):
                print("the programme had tryed 10 times to send the data")
        finally:
            trys+=1
            if(o is not False or trys==10):
                o=True

    socket.close()

, если кто-то может помочь, прежде всего, помогите мне сделать так, чтобы java-код работал, и отправил сообщение servur и после прослушивания serveur, который отправит обратно сообщение, не закрывая соединениеЯ был бы счастлив, если бы вы знали, почему, когда я использую общедоступный IP-адрес маршрутизатора (в коде Java), я могу подключиться только к serveur и не отправлять сообщение, я был бы очень рад, спасибо, если вы знаете, помогите мнеответ, я пробую много способов, но ни один из них не работает, мне нужно это сделать

...