Android TCP/IP Socket Test

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.

时间: 2024-10-09 06:43:08

Android TCP/IP Socket Test的相关文章

Android TCP/IP 扫盲教程

TCP/IP 是因特网的通信协议. 通信协议是对计算机必须遵守的规则的描述,只有遵守这些规则,计算机之间才能进行通信. 浏览器和服务器都在使用 TCP/IP 因特网浏览器和因特网服务器均使用 TCP/IP 来连接因特网.浏览器使用 TCP/IP 来访问因特网服务器,服务器使用 TCP/IP 向浏览器传回 HTML. 电子邮件也使用 TCP/IP 电子邮件程序使用 TCP/IP 来连接因特网,这样才能收发邮件. 因特网地址也是 TCP/IP 你的因特网地址 211.161.247.1 也是标准的

mysql错误:Can’t create TCP/IP socket (10106)

昨天晚上十一点半,有个女同学打电话说电脑出问题了,说tomcat和mysql打不开了,各种急!因为后天就要答辩了,这些软件打不开,系统也就运行不起来!大半夜的让我怎么办,只好说明天早起帮看看! 早早的起来了,接过同学的电脑!回到宿舍看了一下,mysql果然打不开报了这样的错误"mysql错误:Can't create TCP/IP socket (10106)",目测是socket端口被占用的原因,然后在打开tomcat,报的错误中也包含了"socket",再一次加

http tcp/ip socket

这两天重新看了下TCP/IP的基本概念,也重新看了下http协议,分别是<TCP/IP详解卷1:协议>和<Http:The Definitive Guide>这两本书. 看完后有两点感触: (1)基础的理论知识对工作还是有很大帮助.平时工作中,也许我们更多的关注问题怎么解决,而解决问题有多种方式,其中,来的快的就是百度或Android官网的开发文档,这两种方式基本能解决工作中的所有技术问题,且直接告诉你解决问题的方式(步骤或code直接上),这是互联网化知识共享的体现.而很多时候,

一个项目看java TCP/IP Socket编程

前一段时间刚做了个java程序和网络上多台机器的c程序通讯的项目,遵循的是TCP/IP协议,用到了java的Socket编程.网络通讯是java的强项,用TCP/IP协议可以方便的和网络上的其他程序互通消息. 先来介绍下网络协议:     TCP/IP         Transmission Control Protocol 传输控制协议         Internet Protocol 互联网协议     UDP         User Datagram Protocol 用户数据协议

TCP/IP Socket 的理解

网络由下往上分为:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. TCP 协议对应于传输层,HTTP 协议对应应用层,Socket 则是对 TCP/IP 协议的封装. 也可以说 TCP/IP 协议是传输层协议,主要解决数据如何在网络中传输,HTTP 是应用层协议,解决如何包装传输的数据. 实际上 Socket 是对 TCP/IP 协议的封装,Socket 本身并不是协议,而是一个调用接口(API),通过 Scoket 我们才能使用 TCP/IP. 所以说 Socket 的出现只是使

TCP IP SOCKET 笔记

网络由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层, 三者从本质上来说没有可比性, socket则是对TCP/IP协议的封装和应用(程序员层面上). 也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输, 而HTTP是应用层协议,主要解决如何包装数据. 关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍: “我们在传输数据时,可以只使用(传输

【Java TCP/IP Socket】Socket编程知识点总结

简介 1.协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构.交换方式.包含的意义以及怎样对报文所包含的信息进行解析. 2.TCP/IP协议族有IP协议.TCP协议和UDP协议. 3.TCP协议和UDP协议使用的地址叫做端口号,用来区分同一主机上的不同应用程序.TCP协议和UDP协议也叫端到端传输协议,因为他们将数据从一个应用程序传输到另一个应用程序,而IP协议只是将数据从一个主机传输到另一个主机. 4.在TCP/IP协议中,有两部分信息用来确定一个指定的程序:互联网地址和端口号:

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

转载请注明出处:http://blog.csdn.net/ns_code/article/details/14128987 UDP的Java支持 UDP协议提供的服务不同于TCP协议的端到端服务,它是面向非连接的,属不可靠协议,UDP套接字在使用前不需要进行连接.实际上,UDP协议只实现了两个功能: 1)在IP协议的基础上添加了端口: 2)对传输过程中可能产生的数据错误进行了检测,并抛弃已经损坏的数据. Java通过DatagramPacket类和DatagramSocket类来使用UDP套接字

【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)

书上示例 在第一章<基本套接字>中,作者给出了一个TCP Socket通信的例子——反馈服务器,即服务器端直接把从客户端接收到的数据原原本本地反馈回去. 书上客户端代码如下: import java.net.Socket; import java.net.SocketException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class TCPEch