本站业务范围:1、PC端软件开发、网站开发 2、移动端APP、网站、微信接口、微商城开发 3、视频教程、毕业设计辅导
 当前位置:文章中心 >> Android_IOS_移动互联网
立即购买视频教程 利用TCP/IP实现Android客户端与服务端的Socket通讯
夜鹰教程网 来源:www.yyjcw.com 日期:2017/6/28 13:17:55
分享到:
利用TCP/IP实现Android客户端与服务端的Socket通讯

这篇文章不能解决你的问题?我们还有相关视频教程哦!

QQ:1416759661 新手QQ群:7835003  加Q远程协助!

在线解答|Demo制作|远程调试| 点击查看相关的视频教程

技术咨询: 购买教程  技术咨询:购买教程  大胆的加QQ咨询。

什么是TCP/IP协议?

百度百科的解释:Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台电脑规定一个地址。

Wikipedia的解释:TCP/IP协议,包含了一系列构成互联网基础的网络协议。这些协议最早发源于美国国防部的ARPA网项目。TCP/IP模型也被称作DoD模型(Department of Defense Model)。TCP/IP字面上代表了两个协议:TCP(传输控制协议)和IP(网际协议)。



W3Schools的解释:

TCP/IP is the communication protocol for communication between computers on the Internet.

TCP/IP stands for Transmission Control Protocol / Internet Protocol.

TCP/IP defines how electronic devices (like computers) should be connected to the Internet, and how data should be transmitted between them.


什么是Socket?

Socket是应用层与TCP/IP协议簇通讯的中间抽象层,Socket是一组接口,在设计模式中,Socket的设计就是门面模式,它把复杂的TCP/IP协议簇的内容隐藏在套接字接口后面,用户无需关心协议的实现,只需使用Socket提供的接口即可。

Socket的类型有两种,一种是面向连接的TCP应用服务,一种是面向无连接的UDP(User Data Package)应用服务。通俗的理解就是,TCP方式是打电话(连接性),UDP方式是发短信(无连接)。

1355023551_2045.png

Ok,以上是简单的科普,那么接下来就看下如何在Android上利用TCP/IP协议使用Socket与Server进行通讯吧!今天我们要使用的是面向连接的TCP方式。首先,在本机建立一个Java项目作为Server Client,代码如下:

[java] view plain copy

public class SocketServer {  

    //监听端口号  

    private static final int SERVER_PORT = 12345;  

  

    public static void main(String[] args) {  

        try {  

            System.out.println("Server: Connecting...");  

            ServerSocket serverSocket = new ServerSocket(SERVER_PORT);  

            while (true) {  

                //循环监听客户端请求  

                Socket clientSocket = serverSocket.accept();  

                System.out.println("Server: Receiving...");  

                try {  

                    //获取输入流  

                    BufferedReader in = new BufferedReader(  

                            new InputStreamReader(clientSocket.getInputStream()));  

                    //获取从客户端发来的信息  

                    String str = in.readLine();  

                    System.out.println("Server: Received: '" + str + "'");  

                } catch (Exception e) {  

                    System.out.println("Server: Error");  

                    e.printStackTrace();  

                } finally {  

                    clientSocket.close();  

                    System.out.println("Server: Close.");  

                }  

            }  

  

        } catch (Exception e) {  

            System.out.println("Server: Error");  

            e.printStackTrace();  

        }  

    }  

}  


服务端的简单实现就完成了,接下来新建一个Android客户端,布局效果就添加一个Button:



然后是android客户端的实现:

[java] view plain copy

public class SocketAndrodActivity extends Activity {  

    /** Called when the activity is first created. */  

    @Override  

    public void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.main);  

  

        Button button = (Button) this.findViewById(R.id.btn);  

        button.setOnClickListener(new OnClickListener() {  

  

            @Override  

            public void onClick(View v) {  

                try {  

                    System.out.println("Client:Connecting");  

                    //IP地址和端口号(对应服务端),我这的IP是本地路由器的IP地址  

                    Socket socket = new Socket("192.168.1.104", 12345);  

                    //发送给服务端的消息  

                    String message = "Message from Android phone";  

                    try {  

                        System.out.println("Client Sending: '" + message + "'");  

                          

                        //第二个参数为True则为自动flush  

                        PrintWriter out = new PrintWriter(  

                                new BufferedWriter(new OutputStreamWriter(  

                                        socket.getOutputStream())), true);  

                        out.println(message);  

//                      out.flush();  

                    } catch (Exception e) {  

                        e.printStackTrace();  

                    } finally {  

                        //关闭Socket  

                        socket.close();  

                        System.out.println("Client:Socket closed");  

                    }  

                } catch (UnknownHostException e1) {  

                    e1.printStackTrace();  

                } catch (IOException e) {  

                    e.printStackTrace();  

                }  

  

            }  

        });  

    }  

}  


两个工程结构分别如下:

1355024139_7007.png

代码部分就完成了,我的实验环境是在Wifi环境下,PC与Android手机都介入当前无线网路,所以程序里的IP地址是我实验环境无线的IP地址,大家要实验的话需要改成你们自己对应的IP地址。

然后是启动服务端,做了这么久Android,启动Java项目大家还没忘记吧(开玩笑),启动后看到下图这个小红点,就说明Server已经起来了,这个时候,Socket端口就一直处于监听状态了,知道客户端有请求过来。

这时,运行Android端的应用程序,点击布局中的按钮,消息就发出去了:

然后在服务端的输出日志中可以看到,已经接收到了来自Android端的数据请求,信息也顺利得到了:

至此,就完成了一个简单的在Android端与Server利用TCP/IP协议进行通讯的Demo,涉及其中知识点与实现方式有不完备的地方希望大家指点并相互交流。Thanks~


复制链接 网友评论 收藏本文 关闭此页
上一条: android端实现断点续传功能  下一条: Invalid project description overlaps…
购买夜鹰教程网视频教程
  推荐教程/优惠活动

  热门服务/教程目录

  夜鹰教程网  新手必看,详细又全面。
  夜鹰教程网  购买教程  夜鹰教程网  在线支付-方便
  夜鹰教程网  担保交易-快捷安全   夜鹰教程网  闪电发货
  夜鹰教程网  电话和QQ随时可以联系我们。
  夜鹰教程网 不会的功能都可以找我们,按工作量收费。

客服电话:153 9760 0032

购买教程QQ:1416759661  购买教程
  热点推荐
在Struts 2中使用JSON Ajax支持
解决JSP中使用request乱码问题
JSP+JavaScript打造二级级联下拉菜…
Tomcat中文手册(1)
JSP及Servlet中遇到的多线程同步
详解:JSP和Servlet中的绝对路径和…
JSP Struts之HTML标签库详解
自定义JSP标签
JSP中的include指令
errorPage设置方法--JSP
JSP 国际化-格式化货币和日期
九个隐含对象使用总结JSP的
Tomcat中文手册(2)
tomcat6关于EL表达式的一个错误
jsp分页技术代码
  尊贵服务
夜鹰教程网 承接业务:软件开发 网站开发 网页设计 .Net+C#+VS2008+MSsql+Jquery+ExtJs全套高清完整版视频教程
  最近更新
Android调用百度地图使用时出现in…
安卓刷机术语
android端实现断点续传功能
利用TCP/IP实现Android客户端与服…
Invalid project description ove…
推荐使用的meta标签
手机网站用Bootstrap还是jQuery M…
如何让手机访问PC网站自动跳转到手…
提升HTML5的性能体验系列之一 避免…
Android和IOS 字体该做多大合适?…
px,dp,dip,dpi,sp区别
逻辑分辨率和物理分辨率区别
关于智能手机屏幕的分辨率尺寸的问…
WebApp开发尺寸单位的解决方案
float:left与display:inline-blo…
  工具下载  需要远程协助? 购买教程

sql2008视频教程 c#视频教程

VIP服务:如果您的某个功能不会做,可以加我们QQ,给你做DEMO!

JQUERY  Asp.net教程

MVC视频教程  vs2012
.NET+sql开发
手机:15397600032 C#视频教程下载
vs2012 vs2008 vs2010 sql2008 sql2005
Asp.Net  

教程咨询QQ:1416759661


这篇文章不能解决你的问题?我们还有相关视频教程哦!

QQ:1416759661 新手QQ群:7835003  加Q远程协助!

在线解答|Demo制作|远程调试| 点击查看相关的视频教程

技术咨询: 购买教程  技术咨询:购买教程  大胆的加QQ咨询。

关于我们 | 广告投放 | 购买教程 | 网站建设 | 技术辅导 | 常见问题 | 联系我们 | 友情链接 | 购买教程

Nighthawk Tutorials Network 快捷购买教程

夜鹰教程网 版权所有 www.yyjcw.com All rights reserved 备案号:蜀ICP备08011740号3

 

出售asp.net系列视频教程 高清原创版 每天晚上20:30--23:00在线 按照编号从简单到高级 http://www.yyjcw.com/list.html