2 qq 34077991 qq_34077991 于 2016.03.30 10:14 提问

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.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ConnectException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketTimeoutException;

public class Socketest {

public synchronized static String sendMsg(String host, int port, String msg) {
    // 写
    String result = null;
    InputStream is = null;
    OutputStreamWriter osw = null;
    BufferedReader reader = null;
    Socket socket = new Socket();

    try {
        if (port < 0) {
            return "";
        }
        InetSocketAddress isa = new InetSocketAddress(host, port);
        socket.connect(isa, 10000);
        osw = new OutputStreamWriter(socket.getOutputStream());
        BufferedWriter writer = new BufferedWriter(osw);
        writer.write(msg);
        writer.flush();
        byte[] a = readStream(socket.getInputStream());
        result = new String(a);

        System.out.println("result:" + result);
    } catch (SocketTimeoutException e) {
        e.printStackTrace();
        return null;
    } catch (ConnectException e) {
        return null;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    } finally {
        try {
            if (reader != null)
                try {
                    reader.close();
                } catch (Exception e) {
                }
            closeOutputStreamWriter(osw);
            closeInputStream(is);
            closeSocket(socket);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return result;
}

private static void closeOutputStreamWriter(OutputStreamWriter osw) throws IOException {
    if (osw != null) {
        osw.close();
    }
}

private static void closeInputStream(InputStream is) throws IOException {
    if (is != null) {
        is.close();
    }
}

private static void closeSocket(Socket socket) throws IOException {
    if (socket != null) {
        socket.close();
    }
}

private static byte[] readStream(InputStream inputStream) throws IOException {
    int count = 0;
    while (count == 0) {
        count = inputStream.available();
    }
    byte[] b = new byte[count];
    inputStream.read(b);

    return b;
}

}

1个回答

wstcok2003
wstcok2003   2016.03.30 11:06

服务器防火墙关了吗?
安卓机网络权限开了吗?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Socket发送并接收服务器返回的数据
Socket发送并接收服务器返回的数据 个人整理
socket服务端和客户端数据通信 数据交互
socket 服务端 客户端 数据通信 消息 serverSocket 数据交互
Android简单实现Socket通信,客户端连接服务器后,服务器向客户端发送文字数据
案例实现的是简单的Socket通信,当客户端(Android客户端)连接到指定服务器以后,服务器向客户端发送一句话文字信息(你可以拓展其它的了)先看一下服务端程序的实现吧Server.javaimport java.io.IOException;import java.io.Ou
Android中使用Socket来实现服务器端和客户端,进行数据通信(使用原生Socket)
1、服务器端的实现 服务器端需要通过ServerSocket来创建一个ServerSocket服务对象,然后通过accept()方法Socket对象获得来监听连接上来的客户端(这个方法是阻塞的),最后再对客户端发送过来的字节流进行读取。下面贴出我写的服务器端的代码,供参考: private static int PORT = 54327;//端口号 private static List
安卓手机socket通信(服务端和客户端)
socket通信
Android客户端 和 pc服务器 建立socket连接并发送数据
文章讲解了基本的 socket连接知识 提供了一个pc服务端和安卓客户端建立socket连接的例子 并简单的消息发送
C++ socket编程 实现服务端与客户端的通讯
服务器端程序: // Server.cpp : Defines the entry point for the console application. // #include "winsock2.h" #pragma comment(lib, "ws2_32.lib") #include using namespace std; int main(int argc, char*
C++与android通过socket通信(上个版本端口弄错了,这个可以运行)
C++编写的服务器端跟android上编写的手机客户端进行socket通信,传动多种数据。用VC6.0直接打开C++ Server,用eclipse直接打开android socketTest。注意修改一下安卓代码中的IP地址。程序中java和C++的通信的内容使用了:http://download.csdn.net/detail/nuptboyzhb/4595415中的内容,在此感谢。
【android学习】android端通过socket接收到数据产生乱码
【问题重现】 接收到的数据为汉字和字母混合数据,有个别的“�”乱码。 【问题原因】 1)编码格式转换有问题。 经过检查,服务器发送数据使用的是UTF-8格式,android端接收数据也使用的是UTF-8格式来转码。 2)数据过大时,分包接收数据,然后转码。2个分包分别将一个汉字的2个字节分开存储。然后每次一个分包进行转码,汉字的一个字节无法识别,转码后表现为乱码。 所以乱码多数出现
Android socket与服务器通信及心跳连接的实现
在项目中,有如下需求:Android客户端向服务器发送数据,收到服务器返回的数据发送成功标识后,客户端即与服务器建立数据一来一往的心跳连接,若服务器端断开时,客户端接收到通知,关闭Service停止发送数据;代码如下: public class BackService extends Service { private static final String TAG = "BackSer