Время ожидания соединения с tcp сервером при отправке на него данных - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь настроить TCP-клиент-сервер здесь. У меня есть приложение для Android в качестве клиента и сервер Java, чтобы поймать данные. Моя проблема заключается в том, что время соединения с сервером истекает до отправки данных, я предполагаю. Как будто либо никогда не отправляет, либо не может пройти. В netstat порт отображается как открытый, и я даже пытался переадресовать порт, но, похоже, ничего не работает. Вот код приложения для Android, данные которого отправляются с помощью асинхронной задачи.

public class MainActivity extends AppCompatActivity {
EditText el;
Button button;
public final static  String TAG = "PcnoTest";
private static Socket s;
private static ServerSocket ss;
private static InputStreamReader isr;
private  static BufferedReader br;
private static PrintWriter pr;
String message;






@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
         el = (EditText)findViewById(R.id.text);
         button = (Button)findViewById(R.id.button);
         button.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {

            message = el.getText().toString();
            sendData sd = new sendData();
            sd.execute(message);
                 Toast.makeText(getApplicationContext(),"Data Sent",Toast.LENGTH_LONG).show();
                 Toast.makeText(getApplicationContext(),message,Toast.LENGTH_LONG).show();
             }
         });

}

class sendData extends AsyncTask<String, Void, Void> {


 @Override
 protected Void doInBackground(String... voids) {

     String message = voids[0];

     try {

         Log.i(TAG,"Attempting to send...");
         s = new Socket("10.0.0.3", 5041);
         pr = new PrintWriter(s.getOutputStream());
         pr.write(message);
         pr.flush();
         pr.close();
         s.close();

         Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();

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


     return null;
 }



 }
 }

и вот сторона java. использование NetBeans, если это как-то имеет значение.

public class Androidserver extends JFrame{

private JPanel contentPane;
private static ServerSocket ss;
private static Socket s;
private static BufferedReader br;
private static InputStreamReader isr;
private static String message;
private static int port = 5041;

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {


                try{
                    Androidserver frame = new Androidserver();
                    frame.setVisible(true);
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        });
        try{
            while(true){
        ss = new ServerSocket(port);
        System.out.println( "Server is running on port" + port );
        s = ss.accept();
         isr = new InputStreamReader(s.getInputStream());
         br = new BufferedReader(isr);
         message = br.readLine();

         System.out.println(message);

        isr.close();
        br.close();
        ss.close();
        s.close();
            }

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


    }



public Androidserver(){
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100,100,450,300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(3,3,3,5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JLabel lblClient = new JLabel("Server");
    lblClient.setBounds(99,34,46,14);
    contentPane.add(lblClient);


}
}
...