栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android 网络编程基础实验【AS开发实验04】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android 网络编程基础实验【AS开发实验04】

1.服务端:SocketServiceApplication学号 manifests中AndroidManifest.xml





    
        
            
                

                
            
        
    


java中MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity{

    private EditText et_content, et_name;
    private TextView tv_se;
    private MyAPP myAPP;
    @Override
    protected void onCreate(Bundle saveInstanceState){
        super.onCreate(saveInstanceState);
        setContentView(R.layout.activity_main);
        et_content = (EditText) findViewById(R.id.et_content);
        tv_se = (TextView) findViewById(R.id.tv_se);
        et_name = (EditText) findViewById(R.id.et_name);
        myAPP = (MyAPP)getApplication();
}
    public void click1(View view){
        myAPP.setOnConnectListener(new MyAPP.ConnectListener() {
            @Override
            public void onReceiveDate(String data) {
                tv_se.append(data + "n");
            }
        });
    }

    public void click2(View view){
        String name = et_name.getText().toString();
        String a = name + ":" + et_content.getText().toString();
        tv_se.append(a + "n");
        myAPP.send(a);
    }
}
java中MyAPP.java
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.LinkedList;

public class MyAPP extends android.app.Application {

    //socket通信
    private Socket socket = null;
    private ServerSocket serverSocket = null;

    public static OutputStream outputStream;
    private static ConnectListener mListener;
    final LinkedList list = new LinkedList();

    private HandlerThread mHandlerThread;
    //子线程中的Handle实例
    private Handler mSubThreadHandler;



    @Override
    public void onCreate() {
        super.onCreate();
        //启动服务器
        ServerListeners listeners = new ServerListeners();
        listeners.start();
        initHandlerThread();
    }

    public class ServerListeners extends Thread {
        @Override
        public void run() {
            try {
                serverSocket = new ServerSocket(7777);
                while (true) {
                    System.out.println("等待客户端请求...");
                    socket = serverSocket.accept();
                    System.out.println("收到请求。服务器建立连接...");
                    System.out.println("客户端" + socket.getInetAddress().getHostAddress() + "连接成功");
                    System.out.println("客户端" + socket.getRemoteSocketAddress() + "连接成功");
                    list.add(socket);
                    //每次都启动一个新的线程
                    new Thread(new Task(socket)).start();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private void initHandlerThread() {
//创建HandlerThread实例
        mHandlerThread = new HandlerThread("handler_thread");
//开始运行线程
        mHandlerThread.start();
//获取HandlerThread线程中的Iooper实例
        Looper loop = mHandlerThread.getLooper();
//创建Handler与该线程绑定。
        mSubThreadHandler = new Handler(loop) {
            public void handleMessage(Message msg) {
                writeMsg(msg.getData().getString("datal"));
            }
        };
    }
    
    class Task implements Runnable {
        private Socket socket;

        
        public Task(Socket socket) {
            this.socket = socket;
        }

        @Override
        public void run() {
            while (true) {
                int size;
                try {
                    InputStream inputStream = null;//输入流
                    inputStream = socket.getInputStream();
                    byte[] buffer = new byte[1024];
                    size = inputStream.read(buffer);
                    if (size > 0) {
                        if (buffer[0] != (byte) 0xEE) {
                            //将读取的1024个字节构造成一个String类型的变量
                            String date = new String(buffer, 0, size, "gbk");
                            Message message = new Message();
                            message.what = 100;
                            Bundle bundle = new Bundle();
                            bundle.putString("date", date);

                            message.setData(bundle);
                            mHandler.sendMessage(message);
                        }
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    return;
                }
            }
        }
    }

    //接口回调
    public interface ConnectListener {
        void onReceiveDate(String data);
    }

    public void setOnConnectListener(ConnectListener listener) {
        this.mListener = listener;
    }


    Handler mHandler  = new Handler(){
        public void handleMessage(Message msg){
            switch(msg.what){
                case 100:
                    if(mListener!=null){
                         mListener.onReceiveDate(msg.getData().getString("data"));
                    }
                break;
            }
        }
    };





    
    public void send(String bytes){
        Message msg = new Message();
        Bundle bundle = new Bundle();
        bundle.putString("datal",bytes);
        msg.setData(bundle);
        mSubThreadHandler.sendMessage(msg);
    }
    private void writeMsg(String msg){
        for (Socket s :list){
            System.out.println("客户端"+s.getInetAddress().getHostAddress());
            try{
                outputStream = s.getOutputStream();

                if (outputStream != null){
                    outputStream.write(msg.getBytes("gbk"));
                    outputStream.flush();
                }
            }catch (IOException e){
                //TODO Auto-generated catch block
                e.printStackTrace();
            }catch (Exception e){
                System.out.println("客户端socket不存在。");
            }
        }
    }
    
    public void disconnect()throws IOException{
        System.out.println("客户端是否关闭1");
        if (list.size() != 0){
            for (Socket s: list){
                s.close();
                System.out.println("客户端是否关闭2");
            }
        }
        if (outputStream != null)
            outputStream.close();
        list.clear();
    }
}
drawable中kuang.xml


    
    


layout中activity_main.xml


   
    
        
        
        
            
用户端 java中MainActivity.java
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class MainActivity extends AppCompatActivity {
    private EditText etname, etneirong;
    private TextView tvneirong;
    private InputStream inputStream;
    private OutputStream outputStream;
    private HandlerThread mHandlerThread;
    //子线程中的 Handler 实例。
    private Handler mSubThreadHandler;
    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            Bundle bundle = msg.getData();
            String neirong = bundle.getString("neirong");
            tvneirong.append(neirong + "n");
        }
        ;
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        etname = (EditText) findViewById(R.id.edit_name);
        etneirong = (EditText)
                findViewById(R.id.myinternet_tcpclient_EditText02);
        tvneirong = (TextView)
                findViewById(R.id.myinternet_tcpclient_EditText01);
        initHandlerThraed();
    }
    public void lianjie(View view) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                //String ip = "192.168.1.249";
                String ip = "localhost";
                int duankou = 7777;
                try {
                    Socket socket = new Socket(ip, duankou);
                    inputStream = socket.getInputStream();
                    outputStream = socket.getOutputStream();
                    byte[] jieshou = new byte[1024];
                    int len = -1;
                    while ((len = inputStream.read(jieshou)) != -1) {
                        //将 byte 数组转换为 String 类型
                        String neirong = new String(jieshou, 0, len, "gbk");
                        Message message = new Message();
                        Bundle bundle = new Bundle();
                        bundle.putString("neirong", neirong);
                        message.setData(bundle);
                        handler.sendMessage(message);
                    }
                } catch (UnknownHostException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }).start();
    }
    public void fasong(View view) {
        // 得到昵称
        String name = etname.getText().toString();
        // 得到内容
        String neirong = etneirong.getText().toString();
        String all = name + ":" + neirong;
        tvneirong.append(all + "n");
        etneirong.setText("");
        Message msg = new Message();
        msg.obj = all;
        mSubThreadHandler.sendMessage(msg);
    }
    private void initHandlerThraed() {
        //创建 HandlerThread 实例
        mHandlerThread = new HandlerThread("handler_thread");
        //开始运行线程
        mHandlerThread.start();
        //获取 HandlerThread 线程中的 Looper 实例
        Looper loop = mHandlerThread.getLooper();
        //创建 Handler 与该线程绑定。
        mSubThreadHandler = new Handler(loop) {
            public void handleMessage(Message msg) {
                writeMsg((String) msg.obj);
            }
        };
    }
    private void writeMsg(String msg) {
        try {
            outputStream.write(msg.getBytes("gbk"));//发送
            outputStream.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    } }
drawable中edit_bg.xml


    
    
    

layout中activity.xml




    
    
    
    
    
        
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/946510.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号