有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在整个程序中打开socket并通过它传递值

在这里,我创建了一个socket,我想使其成为全局的,并通过单击按钮将整数值传递给socket。但是,当我试图使socket全球化时,我遇到了错误。那么如何使socket成为全局的,并通过它传递整数值呢。如何使socket全局化,并通过它传递整数值。如何使socket全局化,并通过它传递整数值

主要活动:

public class MainActivity extends AppCompatActivity {
Button buttonOn;
Button button1;

Socket socket;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    buttonOn = (Button) findViewById(R.id.ON);
    button1 = (Button) findViewById(R.id.button1);

    try {
        System.out.println("HIIIII");
        socket = new Socket("198.168.0.79",8888);
        socket.getKeepAlive();
    } catch (IOException e) {
        e.printStackTrace();
    }


    buttonOn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int temp = 2;
            bhari b = new bhari();
            b.execute(String.valueOf(temp));

        }
    });

    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            int temp = 1;
            String fan = String.valueOf(temp);
            bhari b = new bhari();
            b.execute(fan);

        }
      });
    }
  }

巴利班:

    class bhari extends AsyncTask<String,Void,Integer>{
     Socket socket;
   DataOutputStream dataOutputStream;

  @Override
  protected Integer doInBackground(String... params) {


          String massage = params[0];
    try {


        if(socket== null){

            System.out.println("if");
            socket = new Socket("192.168.0.79",8888);
            socket.getKeepAlive();
            dataOutputStream = new DataOutputStream(socket.getOutputStream());
            dataOutputStream.write(Integer.parseInt(massage));
            dataOutputStream.flush();
           // dataOutputStream.close();


        }else {
            System.out.println("Else");

            dataOutputStream = new DataOutputStream(socket.getOutputStream());
            dataOutputStream.write(Integer.parseInt(massage));
            dataOutputStream.flush();
           // dataOutputStream.close();

        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println("End");
    return null;
    }
 }

共 (2) 个答案

  1. # 1 楼答案

    实际上,您正在asynctask中创建另一个套接字对象。。 如果要使用同一个套接字对象,也必须将其传递给asynctask。 它的另一个解决方案是将整数值传递给asynctask,但只在asynctask内部创建套接字

  2. # 2 楼答案

    你只需要创建一个单件

    class Mysocket{
    private static Socket socket;
    
    public static Socket getInstance()
    {
    if(socket==null)
    {
       socket = new Socket("192.168.0.79",8888);
            socket.getKeepAlive();
    }
    return socket;
    }
    
    
    }