当前位置: 首页 > news >正文

android与pc 用socket无线通信

今天做一个android与pc通信的小demo(不是wifi,蓝牙)android为客户端,pc为服务器(一对多)。pc代码很简单,android客户端代码也不难,但是有一点不太明白就是在客户端向服务器发送消息时要用

writer= new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);

用writer = new PrintWriter(socket.getOutputStream(), true)这句服务器接收不到消息!

(BufferedWriter主要提供了字符输出的缓冲功能,‌提高了字符输出的效率。

OutputStreamWriter则是一个字符输出流到字节输出流的桥梁,‌负责字符编码的转换。‌主要作用                                    是将字符编码转换为字节编码,‌以便能够输出到各种设备或文件中。

OutputStream,‌是更底层的字节输出流,‌不涉及字符编码的转换)

先记录一下,以备后用!

以下代码为自己实验备份可以用(测试过的)但很不严谨

public class MainActivity extends Activity implements OnClickListener {
    public TextView textView;
    public Socket socket;
    public PrintWriter writer;
    private Button btn;
    private EditText editText;
    public static final int UPDATE_TEXT=1;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.text_view);
        btn=(Button)findViewById(R.id.button);
        editText=(EditText)findViewById(R.id.edit_text);
       btn.setOnClickListener(this);
       //new ConnectTask().execute();
        new Thread(new Runnable() {
            //PrintWriter out;
            @Override
            public void run() {
                try {
                    socket = new Socket("192.168.1.3", 1982);
                    Log.d("MainActivity", "网络初始化成功");
                    writer= new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
                    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                   // writer.println("wochaolezhangyuhui");
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                    Log.d("MainActivity", "未知主机地址");
                } catch (IOException e) {
                    e.printStackTrace();
                    Log.d("MainActivity", "输入输出异常");
                }
            }

        }).start(); 
        
    }
        @Override
        public void onClick(View v) {
        // TODO Auto-generated method stub
        switch(v.getId()){
        case R.id.button:
            String str=editText.getText().toString();
            writer.println(str);
        }
    }

/*class ConnectTask extends AsyncTask<Void, Void, Void> {
    private Socket socket;
    PrintWriter out;
    @Override
    protected Void doInBackground(Void... params) {
        try {
            socket = new Socket("192.168.1.3", 1982); // 替换为PC的IP地址
 
             //out= new PrintWriter(socket.getOutputStream());
             out= new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
             out.write("wochaolezhangyuhui");
            btn.setOnClickListener(new OnClickListener(){

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    //String str=editText.getText();
                    out.write("wochaolezhangyuhui");
                }});

            
            //in.close();
           out.close();
           socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
        }
    }
    */
}

http://www.lryc.cn/news/426932.html

相关文章:

  • 【流程引擎】springboot完美集成activiti工作流方案
  • 11、常见API
  • 渗透第三次作业
  • Python自动化:解锁高效工作与生产力的密钥
  • Sentinel1.8.1 控制台改造
  • 设计模式(2)行为型模式和七大原则
  • 学懂C++(三十一):高级教程——深入详解C++高级多线程编程技术之锁优化与替代
  • Linux - 基础工具使用
  • 理解线程id和简单封装原生线程库
  • Unified 阻抗控制 architecture、framework、approach
  • Java后端面试题(mq相关)(day9)
  • 算法-华为OD机试-识别有效的IP地址和掩码并进行分类统计
  • 钉钉开发网页应用JSAPI前端授权鉴权nodejs实现
  • uniapp 自定义全局弹窗
  • element+-ui图片无法使用--安装
  • Python编码系列—Python ORM(对象关系映射):高效数据库编程实践
  • 一次日志记录中使用fastjson涉及到ByteBuffer的教训
  • 掌握TCP连接管理与流量控制:从零开始
  • python提取b站视频的音频(提供源码
  • 嵌入式Linux ,QT5 鼠标键盘设备参数指定环境变量的方法
  • C语言钥匙迷宫2.0
  • 【多线程】初步认识Thread类及其应用
  • algorithm算法库学习之——划分操作和排序操作
  • XSS实验记录
  • Cortex-A7的GIC(全局中断控制器)使用方法(7):基于stm32MP135的GIC配置中断效果测试
  • c++动态数组new和delete
  • Redis热点知识速览(redis的数据结构、高性能、持久化、主从复制、集群、缓存淘汰策略、事务、Pub/Sub、锁机制、常见问题等)
  • 【C++浅析】lambda表达式:基本结构 使用示例
  • 利用Redis获取权限的多种方式
  • LeetCode - LCR 146- 螺旋遍历二维数组