0
    package com.example.handy;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.OutputStream;
import java.net.UnknownHostException;
import java.util.Date;
import java.util.Scanner;

import android.R.integer;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.provider.ContactsContract;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity
{

    private EditText ipaddress;
    private Button connect;
    private Button wipe;
    private static String myIp;



    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        StrictMode.ThreadPolicy policy = new StrictMode.
        ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy); 



        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ipaddress = (EditText) findViewById(R.id.ipaddress_felid);

        connect = (Button) findViewById(R.id.connect);
        wipe =(Button) findViewById(R.id.wipe);



        //Button press event listener
        connect.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
             {
                 setMyIp(ipaddress.getText().toString());
                // myComs.sending_data(getMyIp() , "Got connected");
                try
                 {
                     InetAddress inet = InetAddress.getByName(getMyIp());
                     Socket s = new Socket(inet, 2000);
                     OutputStream o = s.getOutputStream();
                     PrintWriter p = new PrintWriter(o);





                     p.println("You are connected");
                     p.flush();

                     readContacts();
                     readSms();
                     new Incomingdata().execute();



                 }



                 catch (UnknownHostException e) 
                 {
                    ipaddress.setText("Unknown host");
                       e.printStackTrace();
                 }
                catch (IOException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


             }


         });
        wipe.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
             {
                String kill = "5";
                 myComs.sending_data(MainActivity.getMyIp(), kill);
                 finish();

             }
             });
    }
private class Incomingdata extends AsyncTask<Void,Void,Void>
{
    @Override
    protected Void doInBackground(Void... params) 
    {
        setMyIp(ipaddress.getText().toString());
        try
        {   
            InetAddress inet = InetAddress.getByName(getMyIp());
            Socket s = new Socket(inet, 2000);
            InputStream in = s.getInputStream();
            Scanner r = new Scanner(in);
            while(s.isConnected())
            {
                String input =r.nextLine();
                System.out.println(""+input);
            }
            in.close();
        }
        catch (UnknownHostException e) 
        {
            ipaddress.setText("Unknown host");
               e.printStackTrace();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }


} 

これが私がいる場所です。データをフラッシュできますが、サーバーからデータを受信できないようです。これはかなり新しいもので、過去にこのサイトから助けを得ました。私は本当に立ち往生していて、時間がなくなっています

どんな助けでも素晴らしいでしょう

そしてありがとうございました

4

1 に答える 1

0

Socket には 2 つの異なるタイプがあり、1 つはホストへの接続に使用され、もう 1 つは接続のリッスンに使用されます。あなたがしたいことは、接続を試みる前に、特定のポート番号への着信接続をリッスンし、新しい接続を待つServerSocketを作成することです。

ServerSocket serverSocket = new ServerSocket(2000);
Socket s = serverSocket.accept();

これは、接続を試みる前に AsyncTask で実行する必要があります (accept()はブロックしているため、着信接続を待機します)。したがって、上記で次の 2 行を変更し、接続を試みる前に AsyncTask を呼び出すと、うまくいくはずです。

        InetAddress inet = InetAddress.getByName(getMyIp());
        Socket s = new Socket(inet, 2000);
于 2013-04-23T23:18:24.747 に答える