Java套接字声明会破坏代码执行

时间:2016-08-16 20:06:13

标签: java android multithreading sockets

我正在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

0 个答案:

没有答案