`
1140566087
  • 浏览: 547111 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
博客专栏
2c4ae07c-10c2-3bb0-a106-d91fe0a10f37
c/c++ 入门笔记
浏览量:18055
3161ba8d-c410-3ef9-871c-3e48524c5263
Android 学习笔记
浏览量:309241
Group-logo
J2ME 基础学习课程集
浏览量:17958
A98a97d4-eb03-3faf-af96-c7c28f709feb
Spring 学习过程记录...
浏览量:17183
社区版块
存档分类
最新评论

Android 之 多线程和Socket套接字的使用介绍

阅读更多
                            Android     网络编程

1、网络通信协议及接口
   
    网络通信协议:
        就是对计算机之间通信的信息格式,能被收/发双方接受的传递信息的内容的一组定义。即,连接不同操作系统和不同硬件体系结构的互联网络提供通信支持,是一种网络通用语言。

    网络通信接口:
        为了使两个结点能进行对话,必须在它们之间建立通信工具(即接口),使彼此之间能进行信息交换,接口包括两个部分:
            硬件装置:实现结点之间的信息传送;
            软件装置:规定双方进行通信的约定协议;

2、通信协议的分层思想:
   
    为什么要分层?
    解:由于结点之间联系复杂,在制定协议时,把复杂成分分解成一些简单成分,再将它们复合起来,最常用的复合方式是层次方式,即同层间可以通信,上一层可以调用下一层,而与再下一层没有关系,各层互不影响,利于系统的开发和扩展;

    通信协议的分层规定:
        应用程序作为做最高层,把物理通信线路作为最底层,将期间的协议处理分为若干层,规定每层处理的任务,也规定每层的接口标准。

3、参考模型:
           
            OSI 参考模型            TCP/IP参考模型

        --------------------    --------------------
        |       应用层      |   |                   |
        --------------------    |                   |
        |       表示层      |   |       应用层      |
        --------------------    |                   |
        |       会话层      |   |                   |
        --------------------    --------------------
        |       传输层      |   |       传输层      |
        --------------------    --------------------   
        |       网络层      |   |       网络层      |
        --------------------    --------------------
        |       数据链路层  |   |                   |
        --------------------    |   物理+数据链路层 |
        |       物理层      |   |                   |
        --------------------    --------------------

4、IP 协议:
    IP 协议就是为计算机网络相互连接进行通信设计的协议。在因特网中,它能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通;

           
       
       
5、TCP协议 和 UDP 协议:
   
    TCP协议:专门用来设计用于在不可靠的因特网上提供可靠的、端到端的字节流通信的协议。它是一种面向连接的协议。TCP连接的是字节流而非报文流。
   
    特点:面向连接  |  可靠  |  效率低

    UDP协议:向应用程序提供了一种发送封装的原始IP数据报的方法,并且发送时无需建立连接。是一种不可靠的连接。

    特点:面向无连接  |  不可靠  |  效率高


6、TCP/UDP 区别:
   
    TCP 协议进行通讯的两个应用程序有主次之分,一个称为服务器程序,一个称为客户端程序,两者功能和编写方法不大一样;

    UDP 通信的两个程序是平等的,么有主次之分,2个程序代码可以是一样的;


7、C/S 模式(客户端/服务器模式):优点,
   
    服务器和客户端分摊工作;
    服务器可以同时为数千台客户端服务;
    多个客户端可以同时访问服务器;

提示:代表本地客户端地址:10.0.2.2

8、------------------------------  Socket ------------------------

1、Socket 的介绍:(IT 中称为 "套接字")
   
    Socket:  网络通信的接口,基于不同的协议,有各种不同的Socket , 比如有基于TCP 协
   
    议的Socket 和基于UDP 协议的Socket 以及基于蓝牙协议的Socket ,Android 中使用的是
   
    Java 的Socket 模型;

    Socket 用于描述IP地址和端口,是一种通信链的句柄,这是一个比较抽象的概念;


2、端口简单介绍:
   
    每一个端口都可以有一个应用程序来进行通讯使用;端口是计算机和外界通讯的接口,这些接口都是逻辑接口;
    取值范围:0~~~256*256-1
    提示:1024 以下都是操作系统保留端口,为了避免冲突,请使用 大于1024 的端口号;
    例如:Http 协议使用端口: 80
        Ftp 协议使用端口:21
   
3、Socket 的作用:
   
    应用程序可以通过 “ 套接字 ” 向网络发送请求或者应答网络的请求,这时候就把Socket 分成了两部分,一部分是服务器端的Socket 。 一部分是客户端的Socket ,这个Socket主要用来向网络发送数据。

    注意:发送数据的时候用的是什么协议,接收的时候也要用相同的协议;发送的时候指定接收端的IP地址和端口号就可以了,究竟数据包或数据是如何发送的,框架已经帮我们封装好了,我们不用去关心的;

4、下面请看代码,演示的时 客户端向服务器发送请求,并接收服务器端返回的数据;
    (Socket 是TCP/IP 协议上的一种通信,在通信的两端各建立一个虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信)

    注意:客户端访问服务器需要设置权限:

       
  
 <uses-permission android:name="android.permission.INTERNET"/>


    服务器端:
 
  import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服务器端
 * 
 * @author Administrator
 * 
 */
public class MyServer {

    // 程序入口
    public static void main(String args[]) {

        try {

            // 建立一个ServletSocket ,监听对应的端口,用于监听客户端的连接请求
            ServerSocket serverSocket = new ServerSocket(40000);

            while (true) { // 循环不断接收客户端的请求

                System.out.println("等待客户端请求....");
                Socket socket = serverSocket.accept(); // 等待接收
                System.out.println("收到请求,服务器运行...");

                // 返回数据
                OutputStream os = socket.getOutputStream();
                String msg = "服务器大国的钦差到了...";
                os.write(msg.getBytes("utf-8"));

                /* ---------- 不能在此处读取数据,否则会造成数据堵塞,无法运行 
                理由:使用传统的BufferedReader  的readLine 方法读取数据时,在该方法成功返回之前线程被阻塞,程序无法继续执行。
                ------------- */

                // 接收客户端数据,并返回数据
                // InputStream is = socket.getInputStream();
                // BufferedReader br = new BufferedReader(new
                // InputStreamReader(is,"UTF-8")); // 字符流处理
                // System.out.println("客户端发送数据为:"+br.readLine());

                // is.close();

                /* ---------------------- */
                os.close();
                socket.close();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}



客户端:


package com.sun.clientsocket;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {

    // 程序入口
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            
            // 获取Socket 套接字,指定发送地址以及端口,发送请求
            // 提示:代表本地客户端地址:10.0.2.2
            Socket socket = new Socket("10.0.2.2", 40000);
            
            // 发送请求数据
            OutputStream os = socket.getOutputStream();
            os.write("参加服务器大王,我是客户端使者,请求响应".getBytes("utf-8"));
            
            // 获取服务器返回的数据
            BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Log.i("msg", "服务器数据:"+br.readLine());
            
            os.close();
            br.close();
            socket.close();
        
        } catch (Exception e) {
            // TODO: handle exception
        }
        
    }
    
}


详细请参考附件:实现多线程 多窗口的聊天记录:












  • 大小: 29.8 KB
  • 大小: 90 KB
  • 大小: 105.1 KB
  • 大小: 161.8 KB
分享到:
评论

相关推荐

    OkSocket:适用于Android应用程序的阻塞套接字客户端

    Java应用程序或Andorid的阻塞套接字客户端。 Open source licenses Basic Socket Library Socket Server Plugin Library 中文在线文档 为了照顾中国同学的使用,提供了中文的说明文档: : OkEchoServer开源 由于...

    JAVA Socket教程.chm

    详细讲述了socket得应用。多线程socket应用

    网络编程课程设计报告-Android-Socket-聊天室.doc

    (2)连接(Android 创建Socket会自动连接) (3)与服务器端进行通信 (4)关闭套接字 四、系统流程图 五、系统设计 本课程设计按照系统的具体功能要求,首先应用Socket编程创建客户端和服务器端, 每多个客户端服务器端...

    基于Android的手机导航系统设计与实现(论文+源码)-kaic.docx

    ⑵ 介绍了 Socket 套接字的通信机制,MVC 开发模式,多线程、Android 消息机制等 软件开发技术。对客户端软件进行了需求分析,根据软件需求分析内容,最终实现了导航 系统客户端 UI 模块、登录/注册模块、自我定位...

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    ZLToolKit:一个基于C++11的轻量级网络框架,基于线程池技术可以实现大并发网络IO

    一个基于C++11简单易用的轻量级...对套接字多种操作的封装。线程库使用线程实现的简单易用的定时器。信号量。线程组。简单易用的线程池,可以异步或同步执行任务,支持functional 和 lambad表达式。工具库文件操作。std

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA上百实例源码以及开源项目源代码

    1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭...

    【最新版】wechat_devtools_1.02.2004020.dmg【亲测可用】最好的微信开发者工具

    A 新增 多线程 worker 支持单步调试 A 新增 公众号网页调试中新增 url 收藏夹 A 新增 wx.compressImage 调试 A 新增 小游戏关系链互动数据开发支持 A 新增 支持小游戏 JSServer A 新增 小游戏节点审查插件 A ...

Global site tag (gtag.js) - Google Analytics