Android TCP通信(一)

原创 2016年05月30日 11:35:38

什么是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.服务端

开启一个socket服务端监听一个端口。

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

public class SocketServerTest {

    private static final int SERVER_PORT = 1234;

    public static void main(String[] args) {

        System.out.println("server begin lisening port " + SERVER_PORT
                + ".............");
        try {
            ServerSocket server = new ServerSocket(SERVER_PORT);
            while (true) {
                // 循环监听客户端请求
                Socket clientSocket = server.accept();
                System.out.println("server receiving.............");

                try {
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(clientSocket.getInputStream()));
                    // 从客户端监听到的信息
                    String str = reader.readLine();
                    System.out.println("server received= " + str);
                } catch (Exception e) {
                    System.out.println("server error." + e.getMessage());
                } finally {
                    clientSocket.close();
                    System.out.println("server close.");
                }
            }
        } catch (IOException e) {
            System.out.println("server error." + e.getMessage());
        }
    }
}

2.客户端

package com.lq.mypractice.activity;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

import com.lq.mypractice.R;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;


public class SocketAndrodActivity extends AppCompatActivity {
    /**
     * Called when the activity is first created.
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_socket_androd);

        Button button = (Button) this.findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                new SoketTask().execute();

            }
        });


    }

    private class SoketTask extends AsyncTask<Void, Integer, Integer> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Integer doInBackground(Void... params) {
            try {
                System.out.println("Client:Connecting");
                //IP地址和端口号(对应服务端),我这的IP是本地路由器的IP地址
                Socket socket = new Socket("192.168.205.46", 1234);
                //发送给服务端的消息
                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();
            }
            return null;
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
        }
    }
}

3.测试

客户端:

05-30 11:28:46.302 18016-18802/com.lq.mypractice I/System.out: Client:Connecting
05-30 11:28:46.322 18016-18802/com.lq.mypractice I/System.out: Client Sending: 'Message from Android phone'
05-30 11:28:46.322 18016-18802/com.lq.mypractice I/System.out: Client:Socket closed

服务端:

server begin.............
server receiving.............
server received= Message from Android phone
server close.

参考链接

http://blog.csdn.net/ryantang03/article/details/8274517

详细分析局域网内通过无线实现Android端与PC端TCP/UDP通信的四种情况

Android端与PC端在局域网(可以将两者放在同一个无线路由器下,wifi连接)内通过无线实现通信要分几种具体的情况分析,这里以TCP协议的Socket通信为例来具体说明: 1、Android真...
  • mmc_maodun
  • mmc_maodun
  • 2013年10月26日 16:49
  • 8446

Android利用Socket(TCP)通信实现即时聊天

TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称 TCP / IP。java中的TCP通信都是通过Socket来进行的。Socket 编程 Socket是应...
  • chengliang0315
  • chengliang0315
  • 2017年01月08日 00:53
  • 6064

socket编程(2)—— 一对多通信

1 一对多模型,TCP的编程步骤服务端: 1、socket()获得一个sockfd。注意第二个参数必须SOCK_STREAM. 2、准备通信地址(必须服务器的) 3、bind()绑定。(开放了端...
  • Robot__Man
  • Robot__Man
  • 2016年08月30日 15:59
  • 2409

android tcp通信

  • 2016年11月08日 12:32
  • 2.33MB
  • 下载

Android与服务器通信(TCP&amp;UDP

  • 2015年12月25日 21:41
  • 2.87MB
  • 下载

Android基于socket的TCP通信

  • 2017年04月16日 21:49
  • 303KB
  • 下载

Android TCP Socket通信封装

  • 2016年03月14日 17:16
  • 2.62MB
  • 下载

android_开发之socket编程_UDP和TCP通信实现

  • 2012年03月30日 13:08
  • 99KB
  • 下载

Android Wifi 局域网通信 TCP Client Sokect 客户端收发数据例程

  • 2016年04月26日 00:17
  • 1.95MB
  • 下载

【Android Socket专题】: TCP通信服务器端app的demo的实现

UDP Client客户端  http://blog.csdn.net/shankezh/article/details/50731287 UDP Server服务器 http://blog.csd...
  • shankezh
  • shankezh
  • 2017年04月25日 18:54
  • 4338
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android TCP通信(一)
举报原因:
原因补充:

(最多只允许输入30个字)