android关于socket编程,以聊天为例【转】http://hi.baidu.com/yaoyuanhuajx/item/9b93d7565f315ba9acc857d7...

一步一步android(15):关于socket编程【以聊天为例】

Android手机的应用,除了它的手机功能之外,另外一个吸引人的地方在于它的开放性,这一点iphone无法比拟,至少iphone太多商业化气息。

如同当年windows95一样,android为我们开启另一扇交流之窗,而要实现交流,socket通信必不可少。

java在socket通信方面上已经有了很好的范例,我只是抛砖引玉,将其引入到android之中,疏漏之处在所难免,很多地方也值得深思与考量,高手不必拍砖,可跳过此文。

下面,用敲门的方式演示Android如何实现套接字的通信。

本例实现功能如下:

Server端开启服务
Client端发起链接请求,并向Server端发送数据
Server端响应请求,并在Server显示,向Client端返回数据
Client端接收Server的数据并显示

本例效果如下:

终端1:

 

终端2:

 

Server端:

本例源代码如下:

Server端:

package com.android.Yao;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class YaoChatServer extends Thread {

private YaoChatServer() throws IOException {
   CreateSocket();
   //创建Socket服务器
}

public void run() { 
   Socket client;
   String txt;
   try { 
    while (true)
    //线程无限循环,实时监听socket端口
    {
     client=ResponseSocket();       
     //响应客户端链接请求。。
    
     while(true)
     {
      txt=ReceiveMsg(client);  
      System.out.println(txt);
      //链接获得客户端发来消息,并将其显示在Server端的屏幕上
   
      SendMsg(client,txt);
      //向客户端返回消息

      if(true)break;
      //中断,继续等待链接请求
     }
    
     CloseSocket(client);
     //关闭此次链接
    }   
   } 
   catch (IOException e) {
    System.out.println(e);
   }

}

private ServerSocket server = null;
private static final int PORT = 5000;
private BufferedWriter writer;
private BufferedReader reader;

private void CreateSocket() throws IOException
{
   server = new ServerSocket(PORT, 100);
   System.out.println("Server starting..");  
}

private Socket ResponseSocket() throws IOException
{
   Socket client = server.accept(); 
   System.out.println("client connected..");
  
   return client;
}

private void CloseSocket(Socket socket) throws IOException
{
   reader.close();
   writer.close();
   socket.close();
   System.out.println("client closed..");
}

private void SendMsg(Socket socket,String Msg) throws IOException 
{
   writer = new BufferedWriter(
      new OutputStreamWriter(socket.getOutputStream()));
    writer.write(Msg+"\n");
    writer.flush();
   
}

private String ReceiveMsg(Socket socket) throws IOException
{
   reader = new BufferedReader(
     new InputStreamReader(socket.getInputStream()));     
    System.out.println("server get input from client socket..");
    String txt="Sever send:"+reader.readLine();
   
    return txt;
}

public static void main(final String args[]) throws IOException {
   YaoChatServer yaochatserver = new YaoChatServer();
   if (yaochatserver != null) {
    yaochatserver.start();
   }
}

}

 

Client端:

package com.android.Yao;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.net.UnknownHostException;

import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;


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

        findviews();
        setonclick();

    }

    private EditText chattxt;
    private TextView chattxt2;
    private Button chatok;
    
    public void findviews()
    {
        chattxt = (EditText)this.findViewById(R.id.chattxt);
        chattxt2 = (TextView)this.findViewById(R.id.chattxt2);
        chatok   = (Button)this.findViewById(R.id.chatOk);
    }
    
    private void setonclick()
    {
        chatok.setOnClickListener(new View.OnClickListener() {
   
    @Override
    public void onClick(View v) {
     try {
      connecttoserver(chattxt.getText().toString());
     } catch (UnknownHostException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
    }
   });
    }


    public void connecttoserver(String socketData) throws UnknownHostException, IOException
{
    Socket socket=RequestSocket("192.168.0.107",5000);
   SendMsg(socket,socketData);  
   String txt = ReceiveMsg(socket);
   this.chattxt2.setText(txt);    
}

    
    private Socket RequestSocket(String host,int port) throws UnknownHostException, IOException
    {   
    Socket socket = new Socket(host, port);
    return socket;
    }
    
    private void SendMsg(Socket socket,String msg) throws IOException
    {
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
   writer.write(msg.replace("\n", " ")+"\n");
   writer.flush();
    }
    
    private String ReceiveMsg(Socket socket) throws IOException
    {
    BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    
   String txt=reader.readLine();
   return txt;

    }    
}

转载于:https://www.cnblogs.com/songtzu/archive/2013/01/30/2883622.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

交流电的有效值rms值_【电工基础知识:三、正弦交流电的产生】2正弦交流电的三要素...

正弦交流电正弦交流电是随时间按照正弦函数规律变化的电压和电流。由于交流电的大小和方向都是随时间不断变化的,也就是说,每一瞬间电压(电动势)和电流的数值都不相同,所以在分析和计算交流电路时,必须标明它的正方向。一、周期、…

PHP+Ajax点击加载更多列表数据实例

PHPAjax点击加载更多列表数据实例 一款简单实用的PHPAjax点击加载更多列表数据实例,实现原理:通过“更多”按钮向服务端发送Ajax请求,PHP根据分页参数查询将最新的几条记录,数据以JSON形式返回,前台Query解析JSON数据&…

单反使用知识

内容整理于网络 http://academy.fengniao.com/393/3935386_all.html http://dcdv.zol.com.cn/243/2430148_all.html 单反品牌和型号 大部分是佳能、尼康,几乎中低端市场全是这两品牌,另外还有索尼、奥林巴斯、宾得等。对于佳能,一位数D为专…

elementui的css文件没有引入_Python中引入模块详细介绍,使用模块的过程中注意事项教程...

​为此 Python 提供了一个办法,把这些定义存放在文件中,这个文件被称为模块。模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。你也许还想到,如果不同…

猫:君主般的眼神 监视领地。 狗

转载于:https://www.cnblogs.com/imihiroblog/archive/2013/02/04/2891326.html

Linux进程编程1——与“进程”相关的常识

以下内容源于网络资源的学习与整理,如有侵权请告知删除。 一、进程的概述 进程,是指一个具有独立功能的程序关于某个数据集合的一次可以并发执行的运行活动,是处于活跃状态的计算机程序,是系统进行资源分配和调度的基本单位。进程…

在成长中遇到的挫折事件对你的影响_多种语言环境中成长的宝宝,会影响说话早晚?其实没有想象的复杂...

关于用多种语言抚养孩子的案例比比皆是,但并不是所有的父母都鼓励这样做,他们被告知这会导致孩子混乱和语言延迟,使他们错过机会之窗。以下是最常见的案例,以及把孩子培养成双语者背后的真实故事。误解一、与多种语言一起长大会使…

C#求数组中元素的全排列

2019独角兽企业重金招聘Python工程师标准>>> 1.算法描述 全排列的第一项是该数组的升序排列,最后一项是该数组的降序排列。本文中用到的了一个函数FindNextArray:从升序排列开始,不断使用函数FindNextArray,可以遍历全…

PHP+Ajax手机移动端发红包实例

PHPAjax手机移动端发红包实例 基本流程:当输入完红包数量和总金额后,PHP会根据这两个值进行随机分配每个金额,保证每个人都能领取到一个红包,且每个红包金额不等,并且所有红包金额总额等于总金额。 实现原理&#xff1…

BIOS误删win10引导 delete boot option如何恢复

BIOS误删win10引导 delete boot option如何恢复 其他系统也可以用来参考,解决只是将原来的配置加回去而已 倒了血霉 说个原则,希望大家在发现错误之后第一时间是保护现场不要乱动,如果在百度或别的地方找到了解决方案,先百度一下这个解决方案是否可行,不然不要轻易尝试,这些解决…

fir fpga 不同截止频率_一种新的FIR滤波器系数量化方法

相对于模拟滤波器,数字滤波器具有高精度、高可靠性、可编程改变滤波特性、便于集成等一系列优点,并且理论上可实现近似理想频率特性的滤波性能。经典的数字滤波器主要包括有限脉冲响应(Finite Impulse Response,FIR)滤波器和无限脉冲响应(Inf…

Linux进程编程3——守护进程

以下内容源于网络资源的学习与整理,如有侵权请告知删除。 一、守护进程介绍 1、进程查看命令ps ps -ajx偏向显示各种有关的ID号;ps -aux偏向显示进程各种占用资源 2、(用于向进程发送信号的)指令kill “kill -信号编号 进程ID”&a…

pandas用众数填充缺失值_python数据分析包|Pandas-02之缺失值(NA)处理

本篇详解pandas中缺失值(Missing data handling)处理常用操作。缺失值处理常用于数据分析数据清洗阶段;Pandas中将如下类型定义为缺失值:NaN: ‘’, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’,‘-NaN’, ‘-na…

系统设计学习

2019独角兽企业重金招聘Python工程师标准>>> 这里原帖地址: http://www.mitbbs.com/article_t/JobHunting/32492515.html 以下为转载内容 我是分割线 稍微总结一下1. 入门级的news feedhttp://www.quora.com/What-are-best-practices-for-building-somethttp://w…

编码 括号_Java编码规范整理汇总

来源:博学谷 作者:照照在Java的入门过程中,我们首先要养成一个良好的编写代码习惯。那么,了解清楚Java的编码规范就显得尤为必要了。编码格式不仅仅是美不美观的问题。这里我们可以试想一下,如果在Java开发中编码不规范…

rabbitmq消息队列,消息发送失败,消息持久化,消费者处理失败相关

转&#xff1a;https://blog.csdn.net/u014373554/article/details/92686063 项目是使用springboot项目开发的&#xff0c;前是代码实现&#xff0c;后面有分析发送消息失败、消息持久化、消费者失败处理方法和发送消息解决方法及手动确认的模式 先引入pom.xml <!--rabbitmq…

基于nginx实现缓存功能及uptream模块详细使用方法

基于nginx实现缓存功能及uptream模块详细使用方法一般情况下&#xff0c;前端使用nginx做代理或7层负载并向后实现varish/squid做cache server的效果要好的多nginx与squid做缓存比较nginx比squid有着巨大的优势表现在&#xff1a;nginx是异步假如后端的web服务器&#xff0c;当…

linux中的信号1——进程如何处理信号?

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、信号概述 1、信号是内容受限的一种异步通信机制 &#xff08;1&#xff09;信号的目的&#xff1a;用来进程间通信&#xff08;IPC&#xff09;、进程和内核间的通信。 &#xff08;2&#xff…

单片机oled显示浮点数函数_问中文编程在单片机上实现一个电子时钟,总共有几步?...

首先介绍开发一下语言&#xff1a;mcuScript&#xff0c;他是一个支持同时支持中文编程和英文编程的弱数据类型的脚本语言。相关介绍可参考前面的两篇文章:彭贞&#xff1a;mcuScript一个洋名字的中文(汉语)编程语言&#xff0c;初体验​zhuanlan.zhihu.com彭贞&#xff1a;mcu…

RabbitMQ的消息确认机制

转&#xff1a;https://www.toutiao.com/a6583957771840913934/?tt_frommobile_qq&utm_campaignclient_share&timestamp1532999387&appnews_article&utm_sourcemobile_qq&iid39062783162&utm_mediumtoutiao_android 一&#xff1a;确认种类 RabbitMQ的…