socket-Android Socket使用NIO的基础性问题

问题描述

Android Socket使用NIO的基础性问题

在尝试向SocketChannel写入数据时出问题了,每次写入后返回的Size都是0,问题代码如下:

 SocketChannel socketChannel = null;
 ByteBuffer sendBuffer = null;

下面这是发送数据的函数中一部分

 sendBuffer = ByteBuffer.wrap("hello".getBytes("UTF8"));
 sendBuffer.flip();
 int bufferLength = sendBuffer.array().length;
 int sendsize = 0;
 while(sendBuffer.hasRemaining())
 {
   sendsize += socketChannel.write(sendBuffer);
 }
 sendBuffer.clear();

问题1:查看了ByteBuffer.flip() 和 ByteBuffer.clear()的代码发现都是改变它的位置指针,flip是把position 和 limit 都置0,而remaining的值是limit - position,这样一来flip之后remaining不总是等于0吗?我的循环就始终没有执行,但是又在几篇帖子里看到说write之前需要先flip,于是很困惑。
问题2:如果不加while语句,不判断remaining而直接write,发现返回的size还是0,就是说没有数据被写到socketChannel里。
还请大侠指点迷津!

解决方案

android使用socket于本地PC进行通信的问题
使用NIO实现非阻塞Socket通信
使用NIO实现非阻塞Socket通信

时间: 2024-09-30 00:33:39

socket-Android Socket使用NIO的基础性问题的相关文章

android socket问题,第一次发数据很慢

问题描述 android socket问题,第一次发数据很慢 我建立的socket在刚连接上网络助手的时候,为什么第一次发消息很慢(很少情况下能正常发送)第一次发送成功后再发送就很快.我知道应该和socket的内部实现机制有关,但不知道为什么.有没有大神帮解释下?谢谢,谢谢,谢谢.下面是发送数据的代码,发的数据是十六进制. public void send_data(){ String temp = """"; try { out = new PrintWriter

Android Socket通信详解_Android

一.Socket通信简介  Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据.而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求. 那么,什么是socket?Socket又称套接字,在程序内部提供了与外界通信的端口,即端口通信.通过

android socket编程问题

问题描述 android socket编程问题 代码:运行在pc端的代码:public class SimpleServer { public static void main(String[] args) throws IOException InterruptedException { ServerSocket ss = new ServerSocket(30000); while (true) { System.out.print(""before accept"&qu

android socket 多线程访问服务器有的时候会返回数据有的时候返回失败

问题描述 android socket 多线程访问服务器有的时候会返回数据有的时候返回失败 在写项目的时候遇到一个很棘手的问题,就是加载广告图片的时候,有多个连结同时访问服务器,在返回数据的时候总是只有一个广告线程能返回数据,另一个不能返回,需要让第二个广告线程sleep两秒以上才可以得到广告图片,是一个很纠结的问题,谢谢大神指点`package public class SocketToService { public static final Object SOCKETERROR = "#0

小段数据发送-Android Socket发送数据遇到的奇怪问题

问题描述 Android Socket发送数据遇到的奇怪问题 向各位大虾求救!!! 写一段简单的Android网络通讯程序,发现总是发送数据发了100上下字节(每次8个字节),然后就发不出去了,但是也没有任何异常抛出,检查所有状态都正常. 有谁知道这可能是什么情况? 连接代码是这样的: mSocket=new Socket(mStrIP, mPort); mSocket.setTcpNoDelay(true); // disable Nagle algorithm mSocket.setKeep

Android socket通信接受不完服务端返回的数据

问题描述 Android socket通信接受不完服务端返回的数据 package com.jm.jmsdk_tools_jar; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamRe

android-求教:Android socket通信,发送多条,下面是代码

问题描述 求教:Android socket通信,发送多条,下面是代码 个人写了一个Android Socket的简单通信代码,就是客户端往服务端发送两条数据,但是服务端在接收第二条数据的时候提示socket已关闭连接 客户端代码: Socket socket = new Socket("192.168.56.1", 8888); DataOutputStream dos=new DataOutputStream(socket.getOutputStream()); dos.write

服务器-android socket 连不上 返回Null的问题

问题描述 android socket 连不上 返回Null的问题 用socket写了发消息客户端和服务器,在android studio的模拟器中运行的很正常,可一到手机上 就完全链接不上,为什么到手机上就不正常了呢?代码没有问题,在模拟器上很正常, 可以连接上也可以发送消息,一到手机上就不行-- 调试之后发现模拟器上socket是有效的,在手机上运行就变成了null,就是得不到Socket 求解答呀 解决方案 应该是因为网络问题,模拟器与socket客户端都同一个网络中是可以访问的,但是,s

Android socket通信,数据读取。

问题描述 Android socket通信,数据读取. public class ChatRoom extends ActionBarActivity { protected TextView tv_chat_show; protected EditText ed_chat_input; protected Button btn_send; protected ActionBarActivity that; protected String receiverMsg; protected Stri