热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

androidSocket实现简单聊天小程序

这篇文章主要为大家详细介绍了androidSocket实现简单聊天小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

android Socket实现简单聊天小程序,供大家参考,具体内容如下

服务器端:

package org.hwq.echo; 
 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 
 
public class TalkServer { 
  public static void main(String[] args) throws IOException{ 
    ServerSocket server = null; 
    Socket client = null; 
    BufferedReader in = null; 
    PrintWriter out = null; 
    try{ 
      server = new ServerSocket(4700); 
      client = server.accept(); 
      out = new PrintWriter(client.getOutputStream()); 
      in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
      String line = in.readLine(); 
      while(!"bye".equals(line)){ 
        System.out.println("client:"+line); 
        out.println("echo:"+line); 
        out.flush(); 
        line = in.readLine(); 
      } 
    }catch (Exception e) { 
      e.printStackTrace(); 
      if(client !=null) 
        client.close(); 
      if(server != null) 
        server.close(); 
    } 
  } 
} 

手机端:

package org.hwq.cho; 
 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.Socket; 
import java.net.UnknownHostException; 
 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 
 
public class EchoActivity extends Activity implements OnClickListener { 
  EditText show,msg; 
  Button send; 
  Handler handler; 
  Socket client; 
  /** Called when the activity is first created. */ 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    handler = new MyHandler(); 
    show = (EditText) findViewById(R.id.show); 
    msg = (EditText) findViewById(R.id.msg); 
    send = (Button) findViewById(R.id.send); 
    send.setOnClickListener(this); 
  } 
  @Override 
  public void onClick(View arg0) { 
    String message = msg.getText().toString(); 
//   System.out.println("msg:"+message); 
    new EchoThread(EchoActivity.this,message).start(); 
  } 
  public class MyHandler extends Handler{ 
    @Override 
    public void handleMessage(Message msg) { 
      switch(msg.what){ 
      case 1: 
        Toast.makeText(EchoActivity.this, "建立连接失败", 0).show(); 
        break; 
      case 2: 
        String message = (String) msg.obj; 
        System.out.println("Handler:"+message); 
        show.append("\n"+message); 
        break; 
      } 
    } 
  } 
  private class EchoThread extends Thread{ 
    private Context context; 
    private String msg; 
    EchoThread(Context context,String msg){ 
      this.cOntext= context; 
      this.msg = msg; 
    } 
    public void run(){ 
      if(client == null){ 
        try { 
          client = new Socket("192.168.1.102",4700); 
        } catch (IOException e) { 
          Message message = new Message(); 
          message.what = 1; 
          handler.sendMessage(message); 
        } 
      } 
      System.out.println("建立连接"); 
      try{ 
        BufferedReader in; 
        BufferedReader input; 
        PrintWriter out; 
        in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
        out = new PrintWriter(client.getOutputStream()); 
        String line = msg; 
        if(!"bye".equals(line)){ 
          System.out.println("line:"+line); 
          out.println(line); 
          out.flush(); 
          String echo = in.readLine(); 
          System.out.println("server:"+echo); 
          Message message = new Message(); 
          message.obj = echo; 
          message.what = 2; 
          handler.sendMessage(message); 
        } 
      }catch (Exception e) { 
         
      } 
    } 
  } 
} 

注意几点:

1、添加网络权限

 

如果没添加,无法使用socket连接网络。
2、在新启线程中不要使用android系统UI界面
在EchoThrad的run()方法里面,有下面代码:

if(client == null){ 
        try { 
          client = new Socket("192.168.1.102",4700); 
        } catch (IOException e) { 
          Message message = new Message(); 
          message.what = 1; 
          handler.sendMessage(message); 
        } 
      } 

这里的handler.sendMessage(message);是发送一个消息给handler,然后handler根据消息弹出一个Toast显示连接失败。如果这里直接使用

Toast.makeText(EchoActivity.this, "建立连接失败", 0).show(); 

会报如下错:

Can't create handler inside thread that has not called Looper.prepare() 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 小程序的授权和登陆
    小程序的授权和登陆 ... [详细]
  • 华为捐赠欧拉操作系统,承诺不推商用版
    华为近日宣布将欧拉开源操作系统捐赠给开放原子开源基金会,并承诺不会推出欧拉的商用发行版。此举旨在推动欧拉和鸿蒙操作系统的全场景融合与生态发展。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • LDAP服务器配置与管理
    本文介绍如何通过安装和配置SSSD服务来统一管理用户账户信息,并实现其他系统的登录调用。通过图形化交互界面配置LDAP服务器,确保用户账户信息的集中管理和安全访问。 ... [详细]
  • Swoole加密机制的安全性分析与破解可能性探讨
    本文深入分析了Swoole框架的加密机制,探讨了其在实际应用中的安全性,并评估了潜在的破解可能性。研究结果表明,尽管Swoole的加密算法在大多数情况下能够提供有效的安全保护,但在特定场景下仍存在被攻击的风险。文章还提出了一些改进措施,以增强系统的整体安全性。 ... [详细]
  • 公司计划部署邮件服务器,考虑到已有域名,决定自行搭建内部邮件服务器。经过综合考量,最终选择在Linux环境中进行搭建,并记录了相关配置和实践过程。本文将详细介绍Postfix的基本设置步骤和实践经验,帮助读者快速掌握邮件服务器的搭建方法。 ... [详细]
  • 经过半年的精心整理,我们汇总了当前市场上最全面的Android面试题解析,为移动开发人员的晋升和加薪提供了宝贵的参考资料。本书详细涵盖了从基础到高级的各类面试题,帮助读者全面提升技术实力和面试表现。章节目录包括:- 第一章:Android基础面试题- 第二章:... ... [详细]
  • 人人租机作为国内领先的信用免押租赁平台,为企业和个人提供全方位的新租赁服务。通过接入支付宝小程序功能,该平台实现了从零到百的迅猛增长,成为全国首家推出“新租赁小程序”开发服务的阿里巴巴小程序服务商(ISV)。这一创新举措不仅提升了用户体验,还显著增强了平台的市场竞争力。 ... [详细]
  • 本文介绍了如何查看PHP网站及其源码的方法,包括环境搭建、本地测试、源码查看和在线查找等步骤。 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 本文详细介绍了MySQL数据库服务器(mysqld)和客户端(mysql)的区别,并提供了多种启动和关闭MySQL服务器的方法。通过这些方法,您可以更好地管理和维护MySQL数据库。 ... [详细]
  • 操作系统如何通过进程控制块管理进程
    本文详细介绍了操作系统如何通过进程控制块(PCB)来管理和控制进程。PCB是操作系统感知进程存在的重要数据结构,包含了进程的标识符、状态、资源清单等关键信息。 ... [详细]
  • 在使用群报数小程序进行高效接龙与统计时,可以通过创建 `LinkedList` 对象并利用 `for` 循环生成指定数量的 `Person` 对象,为每个人员分配唯一的编号,并将其添加到 `LinkedList` 集合中。这一过程确保了数据的有序性和高效管理,便于后续的接龙和统计操作。此外,该小程序还支持实时更新和查看参与人员的状态,进一步提升了活动组织的便利性和准确性。 ... [详细]
author-avatar
夜灬哭味
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有