我正在android studio中开展一个项目。该应用程序是一个客户端,使用套接字连接到用c#编写的主机。我是java新手,这是我自己做的第一个项目。我在c#中使用套接字,在java中我发现了很多相似之处,但是我遇到了一个奇怪的问题:在代码执行似乎被中断时,一切都很好,直到新的套接字被初始化。我将发布代码,而不是我将解释究竟发生了什么。
第一部分,主线程:
package com.example.alexandru.news;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telecom.Connection;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class login extends Activity {
EditText emadr;
EditText pasword;
Button log_in_butt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
log_in_butt = (Button) findViewById(R.id.login);
emadr= (EditText) findViewById(R.id.EmailAdr);
pasword= (EditText) findViewById(R.id.Password);
}
public void loginOnClick(View v)
{
final String mesaj=emadr.getText().toString()+"%"+pasword.getText().toString()+"%"+"^STOP^";
String[] perm={"android.permission.CAMERA"}; int a=200;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(perm,a);
}
com.example.alexandru.news.Connection log_in_connection=new com.example.alexandru.news.Connection(mesaj);
log_in_connection.start();
}
}
连接类是我在同一个文件夹中创建的一个类,其中"登录" class(主类)。 Connection类背后的代码:
package com.example.alexandru.news;
import android.content.Context;
import android.util.Xml;
import android.widget.Toast;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.UnknownHostException;
/**
* Created by Alexandru on 14.08.2016.
*/
public class Connection extends Thread {
String ip="some ip";
int port=60000;
String mesaj;
Socket soc;
public Connection(String mesaj) {
this.mesaj=mesaj;
}
@Override
public void run() {
try {
int a=2;
soc= new Socket(ip, port);
DataOutputStream outstream =new DataOutputStream(soc.getOutputStream());
byte[] buffer;
buffer = this.mesaj.getBytes("UTF-8");
outstream.write(buffer);
outstream.flush();
outstream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
当我运行应用程序并按下按钮时,所有内容都会执行,直到满足语句=new Socket(ip,port)
,此时线程不再执行(我认为)。当我正在调试并且在该有问题的行之前设置断点时一切正常。当该行突出显示并按F8时,调试选项卡显示:"应用程序正在运行"然后再次按F8不会进行任何更改。如果我按下"登录"按钮再没有任何反应。
我正在使用USB设备调试应用程序,该应用程序通过WiFi连接到与PC相同的网络。没有端口转发。之前我和我的高中团队一起在一个项目中使用套接字,我们有一个java客户端和一个c#主机,一切正常。但我们正在使用模拟器。我使用了所有的ip地址" ipconfig"给了我改变了端口,没有任何反应。它不起作用。我似乎是唯一有这个问题的人。很抱歉很长的帖子和缺乏细节。
这是日志:
08-17 12:09:38.875 30326-30326/com.example.alexandru.news D/libEGL: loaded /system/lib/egl/libEGL_MRVL.so
08-17 12:09:38.882 30326-30326/com.example.alexandru.news D/libEGL: loaded /system/lib/egl/libGLESv1_CM_MRVL.so
08-17 12:09:38.890 30326-30326/com.example.alexandru.news D/libEGL: loaded /system/lib/egl/libGLESv2_MRVL.so
08-17 12:09:38.898 30326-30326/com.example.alexandru.news D/GC: <tid=30326> OES20 ===> GC Version : GC Ver SS_rls_pxa988_JB42_R1_RC2_GC13.16
08-17 12:09:38.914 30326-30326/com.example.alexandru.news D/OpenGLRenderer: Enabling debug mode 0
08-17 12:09:38.929 30326-30326/com.example.alexandru.news D/WritingBuddyImpl: getCurrentWritingBuddyView()
08-17 12:09:39.054 30326-30326/com.example.alexandru.news D/v_gal: [tid=30326] gralloc_register_buffer: ===>Width = 480, Height = 800, surface = 0x60b55588
08-17 12:09:39.492 30326-30326/com.example.alexandru.news D/v_gal: [tid=30326] gralloc_register_buffer: ===>Width = 480, Height = 800, surface = 0x60e51d40
08-17 12:09:39.984 30326-30326/com.example.alexandru.news D/v_gal: [tid=30326] gralloc_register_buffer: ===>Width = 480, Height = 800, surface = 0x60ef84b8
08-17 12:14:05.617 30326-30350/com.example.alexandru.news D/Er: Eroare
08-17 12:14:17.765 30326-30350/com.example.alexandru.news W/System.err: java.net.SocketTimeoutException: failed to connect to /25.74.114.6 (port 60000) after 1000ms
08-17 12:14:17.765 30326-30350/com.example.alexandru.news W/System.err: at libcore.io.IoBridge.connectErrno(IoBridge.java:159)
08-17 12:14:17.781 30326-30350/com.example.alexandru.news W/System.err: at libcore.io.IoBridge.connect(IoBridge.java:112)
08-17 12:14:17.796 30326-30350/com.example.alexandru.news W/System.err: at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
08-17 12:14:17.796 30326-30350/com.example.alexandru.news W/System.err: at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
08-17 12:14:17.796 30326-30350/com.example.alexandru.news W/System.err: at java.net.Socket.connect(Socket.java:842)
08-17 12:14:17.796 30326-30350/com.example.alexandru.news W/System.err: at com.example.alexandru.news.Connection.run(Connection.java:45)
08-17 12:14:17.828 30326-30350/com.example.alexandru.news D/dalvikvm: threadid=13: still suspended after undo (sc=1 dc=1)
08-17 12:14:17.828 30326-30330/com.example.alexandru.news D/dalvikvm: GC_CONCURRENT freed 360K, 17% free 8692K/10472K, paused 11ms+7ms, total 60ms