在Android Studio上使用套接字进行简单的TCP / IP聊天

时间:2016-08-04 17:15:53

标签: java android android-studio

我是android编程的初学者,我想在android studio中寻求你的帮助..我需要在局域网中创建一个基于客户端 - 服务器的聊天应用程序..我怎样才能构建这个app什么是最简单的方法..

2 个答案:

答案 0 :(得分:1)

我不会告诉你如何对此进行编码,因为这是为了让你弄明白,但我会告诉你你需要做什么。

首先,您需要创建服务器。您可以通过在端口946上打开TCP套接字或任何其他已经绑定到/不是用户的套接字来使用Java。然后,您将需要创建一个数据包处理程序来处理客户端发送的消息包。

现在,对于客户端,您需要为客户端创建一个套接字并将该套接字连接到远程主机。现在,您将创建消息包并通过这个新创建的套接字将它们发送到远程主机,服务器将在您对其进行编码时处理这些数据包。

答案 1 :(得分:0)

以下是一个示例代码,可帮助您入门。

在服务器端

我相信你知道如何使用xml布局创建android UI。 在xml布局中,添加一个带有id的按钮listView。 onclicked按钮将启动服务器,并保持打开以接收来自客户端的消息。

在MainActivity上,在创建了两个,Button和ListView的实例之后,使用findViewById找到Ids。 将listView设置为您创建的适配器。

ArrayAdapter<String> myAdapter = new ArrayAdapter<>(MainActivity.this,   R.layout.list_items, list);
listView.setAdapter(myAdapter);
单击

按钮并调用以下方法。

public void startListening(){
    myThread = new Thread(new Runnable() {
        @Override
        public void run() {
            try{
                ServerSocket server = new ServerSocket(6000);
                while(st) {
                    Socket socket = server.accept();
                    Message clientMessage = Message.obtain();
                    ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                    String strMessage = (String) ois.readObject();
                    clientMessage.obj = strMessage;
                    myHandler.sendMessage(clientMessage);
                    ois.close();
                }
                server.close();
            } catch (IOException e) {
                Message msg = Message.obtain();
                msg.obj = e.getMessage();
                myHandler.sendMessage(msg);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    });
    myThread.start();
}

启动服务器并使用while循环将其保持打开状态,以便从客户端接收数据。 现在添加此方法以更新UI线程。

 Handler myHandler = new Handler(){
    @Override
    public void handleMessage(Message status){
        String myMessage = status.obj.toString();
        list.add(myMessage);
    }
};

在客户端

在xml中添加EditText和发送按钮以将数据发送到服务器。

在mainActivity中,创建editText和Button的实例后,使用findViewById找到它们的ID。

    editText =(EditText)findViewById(R.id.editText);
    send = (Button)findViewById(R.id.send);

点击发送按钮即可执行此操作。

    send.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            myString = editText.getText().toString();
            sendData();
        }
    });

Bellow是sendData()方法。

public void sendData(){
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Socket socket = new Socket("127.0.0.1", 6000);
                ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
                oos.writeObject(myString);
                oos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
    thread.start();
}

在同一个Android设备或模拟器上运行这两个项目。 我认为这应该让你开始。