Ich bin neu in Android und ich habe an diesem Bug für eine Weile gearbeitet, aber immer noch nicht herausgefunden. Ich versuche, eine Nachricht von meinem Smartphone an einen Server auf meinem Laptop zu senden. Das Problem ist, dass es aus irgendeinem Grund beim Erstellen eines Sockets abstürzt (nicht sofort, sondern nach ein paar Sekunden). Obwohl ich die Berechtigungen (.INTERNET) habe und den Code in einem separaten Thread ausführen, schlägt es noch fehl.Der Code Socket clientSocket = new Socket(); Abstürze in Android App sogar in separaten Thread
public class Communcation extends Activity{
private Socket s = null;
short REDIRECTED_SERVERPORT = 5000;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_communcation);
final EditText msg = (EditText) findViewById(R.id.etMsg);
Button send = (Button) findViewById(R.id.bSend);
final TextView convo = (TextView) findViewById(R.id.tvConvo);
convo.setText("");
final TextView status = (TextView) findViewById(R.id.tvStatus);
status.setText("");
Button connect = (Button) findViewById(R.id.btnConnect);
final EditText ipaddress = (EditText) findViewById(R.id.address);
connect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
status.setText("Estabilishing the connection to " + ipaddress.getText().toString());
new Thread() {
public void run() {
try {
s = new Socket(InetAddress.getByName(ipaddress.getText().toString()), REDIRECTED_SERVERPORT);
status.setText("Established connection..");
} catch (IOException e) {
status.setText("Failed the connection" + e.getMessage());
}
}
}.start();
}
});
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String message = msg.getText().toString();
new Thread() {
public void run() {
PrintWriter outp = null;
BufferedReader inp = null;
String serverMsg = null;
try {
outp = new PrintWriter(s.getOutputStream(), true);
inp = new BufferedReader(new InputStreamReader(s.getInputStream()));
} catch (IOException e) {
status.setText("Couldn't initate the buffers ");
}
outp.write(message);
}
}.start();
}
});
}
}
Auf meinem Server-Side-Code warte ich auf eine Verbindung und eine Nachricht drucken, sondern den Code von der Prüfung so weit es geht nie das Teil übernehmen.
while (1)
{ int clientfd;
struct sockaddr_in client_addr;
int addrlen=sizeof(client_addr);
/*---accept a connection (creating a data pipe)---*/
printf("[SERVER] Waiting for clients\n");
clientfd = accept(sockfd, (struct sockaddr*)&client_addr, &addrlen);
printf("%s:%d connected\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));
recv(clientfd, buffer, MAXBUF, 0);
printf("[SERVER] Received from the client: [%s]\n", buffer);
/*---Close data connection---*/
close(clientfd);
}
Veröffentlichen Sie Ihre Stack-Ablaufverfolgung. –
"Der Code stürzt ab" ist keine Problembeschreibung. – EJP