программирование сокетов в разработке приложений для Android - PullRequest
1 голос
/ 13 марта 2012

Это моя серверная программа.Это отлично работает.Он начинает ждать клиента.

package jay.com;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class serv {
public static void main(String[] args) throws IOException{
    String recvsentence = null;
    String sendsentence = null;


    ServerSocket server=new ServerSocket(5000);

    System.out.println("waiting for client");

    Socket sock = server.accept();
    System.out.println("Client Connected with IP Address");

    DataInputStream dis = new DataInputStream(sock.getInputStream());

    DataOutputStream dos = new DataOutputStream(sock.getOutputStream());

    recvsentence = dis.readUTF();

    System.out.println("Got Data");

    sendsentence = recvsentence+"changed";

    System.out.println("Message Altered");

    dos.writeUTF(sendsentence);

    sock.close();

    server.close();

}

}

Это моя клиентская программа.Сокет здесь не создается ....

package jay.com;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class Mypro1 extends Activity {
EditText myText,finaltext;
Button button;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    myText=(EditText)findViewById(R.id.editText1);
    button=(Button)findViewById(R.id.button1);
    finaltext=(EditText)findViewById(R.id.editText2);


    button.setOnClickListener(new View.OnClickListener(){

        public void onClick(View arg0) {
            byte adr[] = new byte[4];
            adr[0]=(byte)(192);
            adr[1]=(byte)(168);
            adr[2]=(byte)(1);
            adr[3]=(byte)(141);
            String sendsentence=null;
            String recvsentence=null;
            InetAddress addr=null;      

            try {
                addr = InetAddress.getByName("10.0.2.2");
                //finaltext.setText(addr.toString());
            } catch (UnknownHostException e1) {
                e1.printStackTrace();
            }

            try {
                //finaltext.setText("hi");
                Socket con=new Socket(addr,5000);

                finaltext.setText("Socket Created");

                DataInputStream dis = new DataInputStream(con.getInputStream());
                DataOutputStream dos = new DataOutputStream(con.getOutputStream());

                sendsentence=myText.getText().toString();

                dos.writeUTF(sendsentence);

                System.out.println("waiting for server response");

                recvsentence = dis.readUTF();

                System.out.println("got response");

                finaltext.setText(recvsentence);

            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                System.out.println("Problem while creating");
                e.printStackTrace();
            }

        }
    });
}

}

Может кто-нибудь сказать мне, в чем проблема, а также я хочу знать, как запустить программу.какой IP-адрес я должен дать.должен ли я попытаться подключиться к 10.0.2.2 или к 192.168.1.141 (мой IP-адрес) ....

Ответы [ 3 ]

1 голос
/ 13 марта 2012

Вы можете узнать IP-адрес сервера, позвонив по номеру server.getInetAddress();

. Поэтому, если вы измените строку после создания ServerSocket, вы увидите текущий IP-адрес вашего сервера.

System.out.println("waiting for client on IP " + server.getInetAddress());
0 голосов
/ 21 февраля 2013

Сокеты не создаются в потоке пользовательского интерфейса.Они должны быть созданы в отдельном потоке, иначе ОС будет заблокирована.Наилучшим подходом является использование AysncTask, но для начала

    new thread(new new Runnable() {
    public void run() {
        // create your socket here.
    }
}).start();

Этот подход может работать.

0 голосов
/ 09 апреля 2012

Если вы запускаете серверное клиентское приложение на эмуляторе, вам придется перенаправить порт, иначе ваш эмулятор не будет работать как сервер - Пройдите через это ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...