zoukankan      html  css  js  c++  java
  • Android 使用Socket进行通信(Android)

    一。服务器程序

    服务器程序需要在PC上运行,该程序比较的简单,因此不需要建立Android项目,直接定义一个JAVA类,并且运行该类即可。它仅仅建立ServerSocket监听,并使用Socket获取输入输出流。

    SimpleServer
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    
    public class SimpleServer {
    
        /**
         * @param args
         * @throws IOException 
         */
        public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub
    
            //创建一个ServerSocket,用于监听客户端socket的连接请求
            ServerSocket ss=new ServerSocket(30000);
            //采用循环不断接受来自客户端的请求,服务器端也对应产生一个Socket
            while(true){
                Socket s=ss.accept();
                OutputStream os=s.getOutputStream();
                os.write("您好,您收到了服务器的新年祝福!
    ".getBytes("utf-8"));
                os.close();
                s.close();
        }
    
        }}

    二。客户端程序

    它仅仅使用Socket建立与制定的IP、制定端口的连接,并使用Socket获取输入输出流读取数据。该客户端程序是一个Android应用,因此还需要建立一个Android项目,改程序的界面包含一个文本框,用于显示从服务器读取的字符串的数据。

    SimpleClient
    
    package my.learn.tcp;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.EditText;
    
    public class SimpleClient extends Activity {
        private EditText show;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            show = (EditText) findViewById(R.id.show);
    
            try {
    
                Socket socket = new Socket("自己计算机的IP地址", 30000);
                //设置10秒之后即认为是超时
                socket.setSoTimeout(10000);
                BufferedReader br = new BufferedReader(new InputStreamReader(
                        socket.getInputStream()));
                String line = br.readLine();
    
                show.setText("来自服务器的数据:"+line);
    
                br.close();
                socket.close();
    
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                Log.e("UnknownHost", "来自服务器的数据");
                e.printStackTrace();
            } catch (IOException e) {
                Log.e("IOException", "来自服务器的数据");
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
    
    }

    需要注意的是,在Manifest.xml文件当中,需要对互联网的访问进行授权

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

    效果图:

  • 相关阅读:
    2955 ACM 杭电 抢银行 01背包 乘法
    杭店 ACM 1864 最大报销额 01背包
    【ACM】 1231 最大连续子序列
    如何保证消息队列的幂等性
    Kafka如何保证消息的高可用
    消息队列的优点和缺点
    架构学习和经验积累的方法
    如何撰写总体设计与详细设计文档
    如何做合格的面试官
    如何设计好的接口
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/6252903.html
Copyright © 2011-2022 走看看