Я пытаюсь настроить 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);
}
}