【问题标题】:Simple TCP/IP Chat using sockets on android Studio在 android Studio 上使用套接字进行简单的 TCP/IP 聊天
【发布时间】:2016-08-04 17:15:52
【问题描述】:

我是 android 编程的初学者,我想在 android studio 中寻求您的帮助。我需要在局域网中创建一个基于客户端-服务器聊天的应用程序。我该如何构建这个应用程序以及最简单的方法是什么..

【问题讨论】:

  • 看起来你最好的选择是搜索教程。你问的不是任何人都可以回答的具体问题。
  • 你可以从开源项目开始工作。firechat
  • 创建一个聊天服务器,然后基于它创建一个打包的应用程序。

标签: java android android-studio


【解决方案1】:

我不会告诉你如何编写代码,因为这是你自己想办法,但我会告诉你需要做什么。

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

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

【讨论】:

    【解决方案2】:

    这里有一个示例代码可以帮助您入门。

    在服务器端

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

    在MainActivity上,创建了Button和ListView这两者的实例后,找到了带有findViewById的Id。 将 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();
            }
        });
    

    下面是 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();
    }
    

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

    【讨论】:

      猜你喜欢
      • 2013-02-21
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 2014-08-03
      相关资源
      最近更新 更多