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方式是发短信(无连接)。

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

  1. public class SocketServer {
  2. //监听端口号
  3. private static final int SERVER_PORT = 12345;
  4. public static void main(String[] args) {
  5. try {
  6. System.out.println("Server: Connecting...");
  7. ServerSocket serverSocket = new ServerSocket(SERVER_PORT);
  8. while (true) {
  9. //循环监听客户端请求
  10. Socket clientSocket = serverSocket.accept();
  11. System.out.println("Server: Receiving...");
  12. try {
  13. //获取输入流
  14. BufferedReader in = new BufferedReader(
  15. new InputStreamReader(clientSocket.getInputStream()));
  16. //获取从客户端发来的信息
  17. String str = in.readLine();
  18. System.out.println("Server: Received: '" + str + "'");
  19. } catch (Exception e) {
  20. System.out.println("Server: Error");
  21. e.printStackTrace();
  22. } finally {
  23. clientSocket.close();
  24. System.out.println("Server: Close.");
  25. }
  26. }
  27. } catch (Exception e) {
  28. System.out.println("Server: Error");
  29. e.printStackTrace();
  30. }
  31. }
  32. }

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

然后是Android客户端的实现:

  1. public class SocketAndrodActivity extends Activity {
  2. /** Called when the activity is first created. */
  3. @Override
  4. public void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.main);
  7. Button button = (Button) this.findViewById(R.id.btn);
  8. button.setOnClickListener(new OnClickListener() {
  9. @Override
  10. public void onClick(View v) {
  11. try {
  12. System.out.println("Client:Connecting");
  13. //IP地址和端口号(对应服务端),我这的IP是本地路由器的IP地址
  14. Socket socket = new Socket("192.168.1.104", 12345);
  15. //发送给服务端的消息
  16. String message = "Message from Android phone";
  17. try {
  18. System.out.println("Client Sending: '" + message + "'");
  19. //第二个参数为True则为自动flush
  20. PrintWriter out = new PrintWriter(
  21. new BufferedWriter(new OutputStreamWriter(
  22. socket.getOutputStream())), true);
  23. out.println(message);
  24. //                      out.flush();
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27. } finally {
  28. //关闭Socket
  29. socket.close();
  30. System.out.println("Client:Socket closed");
  31. }
  32. } catch (UnknownHostException e1) {
  33. e1.printStackTrace();
  34. } catch (IOException e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. });
  39. }
  40. }

两个工程结构分别如下:

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

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

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

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

至此,就完成了一个简单的在Android端与Server利用TCP/IP协议进行通讯的Demo.

Android TCP/IP Socket Test的更多相关文章

  1. mysql错误:Can’t create TCP/IP socket (10106) 解决方法

    错误描述 “mysql错误:Can’t create TCP/IP socket (10106)”,目测是socket端口被占用的原因,然后在打开tomcat,报的错误中也包含了“socket”,再一 ...

  2. Linux IPC tcp/ip socket 编程

    模型 #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include < ...

  3. HTTP,TCP/IP,Socket

    HTTP:超文本传输协议,首先它是一个协议,并且是基于TCP/IP协议基础之上的应用层协议. TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,HTTP是应用层协议,主要解决如何包装数据. ...

  4. TCP/IP Socket发送接收图片demo

    一个实例通过client端和server端通讯 客户端通过TCP/IP传输资源文件,比如图片,文字,音频,视频等..... 服务端接受到文件存入本地磁盘,返回接受到:“收到来自于"+s.ge ...

  5. python 网络编程 TCP/IP socket UDP

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

  6. TCP/IP Socket 的理解

         网络由下往上分为:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.      TCP 协议对应于传输层,HTTP 协议对应应用层,Socket 则是对 TCP/IP 协议的封装. ...

  7. 【Java TCP/IP Socket】TCP Socket(含代码)

    TCP的Java支持 协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构.交换方式.包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP协议族有IP协议.TCP协议和UDP协议.现 ...

  8. 理解TCP/IP,SOCKET,HTTP,FTP,RMI,RPC,webservic

    TCP/IP:网络宽带,传输数据的基础协议,所有得数据要在网络上传输都是基于TCP/IP协议(或UDP),才能送达到指定的目的地(IP,服务器硬件地址). SOCKET:SOCKET只是面对编程人员的 ...

  9. http和tcp/ip,socket的区别

    http协议和tcp/ip协议乍看起来,感觉是同一类的东西,其实不然,下面简单的说说他们的区别. http协议是应用层的一种数据封装协议,类似的还有ftp,telnet等等,而tcp/ip是数据传输层 ...

随机推荐

  1. BZOJ 2225 [Spoj 2371]Another Longest Increasing(CDQ分治)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2225 [题目大意] 给定N个数对(xi,yi),求最长上升子序列的长度. 上升序列定义 ...

  2. 【最短路】【dijkstra】【二进制拆分】hdu6166 Senior Pan

    题意:给你一张带权有向图,问你某个点集中,两两结点之间的最短路的最小值是多少. 其实就是dijkstra,只不过往堆里塞边的时候,要注意塞进去它是从集合中的哪个起始点过来的,然后在更新某个点的答案的时 ...

  3. 【递推+高精度】POJ2506-Tiling

    思路别人那里讲的很清楚了,我就不阐述了.链接 #include<iostream> #include<cstdio> #include<cmath> #includ ...

  4. [BalkanOI2016]Lefkaritika

    题目大意: 一个n*m的格子上有b个障碍物,现在让你往上面放正方形(长宽在格线上).问可以放多少种边长.位置不同的正方形? 思路: 很容易想到一个O(n^3)的暴力: 首先前缀和,然后枚举某一个顶点和 ...

  5. (转)JS中的对象

    1.对象 要有对象, 就先要有创建对象的方法. 在C++/Java等语言, 这个方法就是实例化XXX类的一个实例xxx.而在JavaScript的世界里实际没有类的东西, 当然仍然可以用"类 ...

  6. python实现简单的梯度下降法

    代码如下: # 梯度下降法模拟 import numpy as np import matplotlib.pyplot as plt plot_x = np.linspace(-1,6,141) # ...

  7. Fatal error: Call to undefined function mb_detect_encoding()

    1.找到php扩展目录(我的php扩展目录的路径是:C:\Program Files\AppServ\php\extensions)     在extensions目录下面找到php_mbstring ...

  8. .Net中的7Zip——Sharpcompress

    虽然微软在.net 4.5中集成了对zip的解压支持,但还是比较弱.如果我们想让程序像7zip那样支持万能解压,Sharpcompress可以帮你实现这个目标,它是一个C#写的压缩/解压工具,虽然还没 ...

  9. 转载:通过扩大IE使用内存,解决skyline在IE下模型不能加载的方法

    转自:https://www.cnblogs.com/cannel/p/5261009.html 环境:skyline TerraExploere 6.6,win 10 sp1 64位,ie 11 情 ...

  10. 粗览Activiti Modeler操作和源代码

    Activiti Model Editor组件 我的 了解ActivitiExplorer及其Vaadin实现方式博文里提到ActivitiExplorer使用的是Vaadin架构,但是Activit ...