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个回答

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Socket通信服务端
通过VC++的网络通信编程程序,很好的网络编程入门实例
Socket通信的服务端
Socket通信的客户端的连接方式与简单的使用方法
socket通信,服务端
建立端口监听,可以发送数据,这个是同步接受的,
socket通信--服务端
package com.xjh.demo.socket; import java.net.ServerSocket; import java.net.Socket; public class SocketServer { public static final int PORT = 12345; public static void main(String[] args...
Android RecyclerView 接受后台返回数据
第一步 布局 &lt;LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"&gt; &lt;android.support.v7.widget.RecyclerView ...
HTTP接口跨域-服务端接受返回处理
1.客户端和正常调用非跨域接口一样 2.服务端 返回的时候用callback+(返回值)的方式返回结果. callback为客户端的隐藏参数. public String converJsonResultSimple(JsonResultSimple jrs,String callback,String logStr){ String jsonString = JSON.toJSO
java android Socket通信 发送以及接受
// 变量 // 线程池 private ExecutorService mThreadPool;// 为了方便展示,此处直接采用线程池进行线程管理,而没有一个个开线程 public static Socket socket;// Socket变量 /** * 发送消息到服务器 变量 */ // 输出流对象 public static OutputStream outputStream;
c# SOCKET通信,服务端,客户端
包括服务端源码和客户端源码,实现SOCKET数据传输
socket通信(客户端,服务端源代码)
socket通信(客户端,服务端源代码)
c++ socket通信 服务端设计思路。
c++ socket通信 服务端设计思路,包括阻塞和非阻塞的。rn重点需要:rn1.多个客户端连接服务端,服务端采用一个客户开一个accept线程好,还是一个accept服务多个客户?rn2.当客户端们连接上了服务端后,服务端如何能够知道那个客户端给他发了信息;在需要给指定的客户端发送信息的时候,如何做?
android客户端服务端采用Socket通信
android客户端服务端采用Socket通信的例子!
socket通信客户端和服务端代码
socket通信客户端和服务端代码,下载后编译可通过,可调试!
php服务端与android客户端socket通信
[size=large][color=red] php写的服务端和java写的android客户端通过socket通信[/color][/size] php服务端的代码要在类似apache的服务器中运行,代码如下: [code=&quot;php&quot;] [/code] android客户端在同一台机器上的模拟器中运行,代码如下: [code=&quot;...
多线程socket通信(服务端)
这只是一个示例程序,没有做错误处理。 编程语言:c++ 编译\运行环境:ubuntu 名词解释: 套接字描述符:https://blog.csdn.net/liusandian/article/details/51989117 #include&amp;amp;amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;amp;amp;gt; #include&amp;amp;amp;amp;amp;amp;lt;sys/socket.h&amp;amp;amp;amp;amp;
Socket通信(服务端--客房端)
现在的很多项目中基本上都用到了Socket通信服务以及多线程的应用,我自己写了个小例子,用到两个关键字,datagrameSocket表示客户程序和服务程序自寻址套接字,datagramePacket对象描绘了自寻址包的地址信息,以及线程池Executors的newFixedThreadPool()方法
socket通信服务端C#代码
学习C#编写socket通信的简单代码,有完整的代码注释。
socket通信 客户端 服务端
C# 开发的 socket通信 客户端 与 服务端
基于socket通信的服务端和客户端
基于 socket通信的服务端和客户端 C++网络编程
Socket通信客户端和服务端.rar
用C#写的客户端和服务端,采用socket实现数据的接收与发送
socket通信服务端绑定失败
在root用户下可以绑定成功,但在普通用户下到绑定函数就报错 bind: Invalid or incomplete multibyte or wide characterrn这是为什么啊,我的程序中有问题么???谢谢你的回答!!!rn#include rn #include rn #include rn #include rn #include rn #include rn #include "include.h"rn rn /*服务器端套接字*/rn int socketserver (char *pcPort)rn rn printf("socket服务端开始\n");rn rn /*变量定义*/rn int iListen; /*监听套接字描述符*/rn int iTransfer; /*数据传送套接字描述符*/rn int iJudge = 0; /*存储返回值判定操作是否成功*/rn int iIndex = 0; /*索引标记*/rn int iMsgid; /*报村消息队列描述符*/rn int iShmid;rn int iLengthaddr = sizeof(struct sockaddr_in); /*存储地址长度*/rn int iFor; /*for语句变量*/rn int iRet;rn struct sockaddr_in stLocaladdr; /*本机地址信息存放地址结构体*/rn struct sockaddr stRemoteaddr; /*远端地址信息存放地址结构体*/rn struct stClient stAccept; /*接收客户端发过来的信息*/rn struct stServer stTemp;rn struct stShmItem stWrite;rn rn int iCounter = 0;rn rn rn rn /*创建套接字*/rn iListen = socket(AF_INET, SOCK_STREAM, 0); /*创建socket,互联网协议族,面向TCP协议联系*/rn if(iListen == -1)rn rn printf("socket创建失败\n");rn return 0;rn rn elsern rn printf("socket创建成功\n");rn printf("socket ID是 %d\n", iListen);rn rn rn rn /*地址结构题初始化*/rn bzero (&stLocaladdr, sizeof(stLocaladdr));rn stLocaladdr.sin_family = AF_INET; /*socket使用TCP协议族*/ rn stLocaladdr.sin_port = htons(atoi(pcPort)); /*端口的字节顺序转换成网络顺序的字节*/rn stLocaladdr.sin_addr.s_addr = htonl(INADDR_ANY);rn rn printf("端转换为数字端口值为%d\n", atoi(pcPort));rn printf("stLocaladdr.sin_port为%d\n", ntohs(stLocaladdr.sin_port));rn rn /*绑定服务器地址、端口和socket */rn iJudge = bind(iListen, (struct sockaddr*)&stLocaladdr, sizeof(stLocaladdr));rn if(iJudge == -1)rn rn printf("绑定本机地址信息出错\n");rn perror("bind");rn return 0;rn rn elsern rn printf("绑定地址成功\n");rn printf("绑定端口为%d\n", htons(atoi(pcPort)));rn printf("绑定IP地址为%ld\n", htonl(stLocaladdr.sin_addr.s_addr));rn rn rn rn /*启用监听*/rn iJudge = listen(iListen, BACKLOG); /*监听最大完成连接队列数为10*/rn if(iJudge == -1)rn rn printf("监听出错\n");rn perror("listen");rn rn elsern rn printf("listenning......\n");rn rn rn /*接受链接请求*/rn while(1)rn rn rn iTransfer = accept(iListen, &stRemoteaddr, &iLengthaddr);rn rn if (iTransfer == -1)rn rn printf("接受连接请求失败\n");rn perror("accept");rn continue;rn rn rn if(!fork()) rn rn printf("多进程\n");rn iCounter++;rn rn rn rn close(iListen); /*关闭监听套接字*/rn return 0;rn rn rn
服务端&客户端Socket通信
 服务端代码 using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; using System.Text.RegularExpressions; using System.Threading; using Mode; using ...
Android客户端和python服务端socket通信
Android端: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layou...
关于C# Socket通信服务端
想请教一下:我是用C# Socket异步通信编程。现在想实现这样的功能:在服务端与客户端连接的情况下,客户端断开时,服务端能够在界面上显示提醒(类似:客户端192.168.1.100:6300已断开)。不知该如何实现,求教。
安卓手机socket通信(服务端和客户端)
安卓作为服务端和移动端进行手机通信,亲测:运行没有问题!
android线程做服务端接受数据传给UI线程
//读写线程     private class ReadThread extends Thread {         @Override         public void run() {             byte[] buffer = new byte[1024];             int bytes;             InputStream mmIn
WebUploader 接收服务端返回的数据
**上传文件成功两部曲** 1、通过WebUploade插件  获取上传文件的信息数据并传参给服务端程序,为WebUploader意义上的上传文件成功;2、通过服务端程序  将文件保存到指定路径和文件信息入库,为最终的上传文件成功;一、遇到的问题上传简历时,上传文件成功两部曲第二步骤中解析文件入库时,解析文件失败,导致上传文件失败,上传文件时需要提示对应的error信息。二、解决******Web...
服务端和客户端发送,接受的数据次数不一样?
[code=C/C++]rn客户端发送10次 数据包给服务端rnrn服务端只接收了到2次,而且还死住了,具体死在哪里不知道rnrn服务单到处设置断点,结果还看不到rnrnrn服务端: rnrnrnrn// a.cpp : 定义控制台应用程序的入口点。rn//rnrn#include "stdafx.h"rnrn#include rn#include rn#includernrn#includernrnrnrn#pragma comment(lib, "WS2_32") // 链接到WS2_32.librn#define WM_SOKCET (WM_USER+100) //套接字消息rnrn//加载环境rnclass CInitWinSockrnrnpublic:rn CInitWinSock(BYTE minorVer = 2, BYTE majorVer = 2)rn rn // 初始化WS2_32.dllrn WSADATA wsaData;rn WORD sockVersion = MAKEWORD(minorVer, majorVer);rn if(::WSAStartup(sockVersion, &wsaData) != 0)rn rn exit(0);rn rn rn ~CInitWinSock()rn rn ::WSACleanup();rn rn;rnrnrnCInitWinSock g_initsock; //全局对象rnSOCKET g_listenSock; //监听套接字rnrnrn#define MAX_CONNECS 5rnSOCKET g_socks[MAX_CONNECS];rnWSAEVENT g_events[MAX_CONNECS];rnrnint g_index=0;rnrnrnunsigned int WINAPI ThreadFun(void*);rnrnrnrnrnint main()rnrnrnrn rn USHORT nPort = 9585; // 此服务器监听的端口号rnrn // 创建监听套节字rn g_listenSock = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);rn sockaddr_in sin;rn sin.sin_family = AF_INET;rn sin.sin_port = htons(nPort);rn sin.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");rnrn // 绑定套节字到本地机器rn if(::bind(g_listenSock, (sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR)rn rn printf(" Failed bind() \n");rn return -1;rn rnrnrn //创建事件,关联,然后监听rnrn WSAEVENT listenEvent=WSACreateEvent();rnrn g_socks[g_index]=g_listenSock;rn g_events[g_index]=listenEvent; rnrn WSAEventSelect(g_socks[g_index], g_events[g_index],FD_READ|FD_CLOSE|FD_ACCEPT);rnrn g_index++;rnrnrn // 进入监听模式rn ::listen(g_listenSock,MAX_CONNECS);rnrn //开启线程接受连接,及接受、发送数据 rnrnrn HANDLE hThread=(HANDLE)_beginthreadex(NULL,0,ThreadFun,NULL,0,NULL);rnrn CloseHandle(hThread);rnrn while(1)rn rn Sleep(100);rn rnrnrn return 0;rnrnrnrnrn rnrnrnunsigned int WINAPI ThreadFun(void*)rnrn rn while(1)rn rnrn //等待事件对象发生rnrn int index=WSAWaitForMultipleEvents(g_index, g_events,FALSE,-1,FALSE);rnrn if(index==WSA_WAIT_FAILED ) rn //打印错误rn continue;rn rnrnrn //定义一个结构体rnrn WSANETWORKEVENTS wsaNWEs;rnrn ZeroMemory(&wsaNWEs,sizeof(wsaNWEs));rn rn //轮训套接字rn for(int i=0 ;i rn#include rn#includernrn#pragma comment(lib, "WS2_32") // 链接到WS2_32.librn#define WM_SOKCET (WM_USER+100) //套接字消息rnrn//加载环境rnclass CInitWinSockrnrnpublic:rn CInitWinSock(BYTE minorVer = 2, BYTE majorVer = 2)rn rn // 初始化WS2_32.dllrn WSADATA wsaData;rn WORD sockVersion = MAKEWORD(minorVer, majorVer);rn if(::WSAStartup(sockVersion, &wsaData) != 0)rn rn exit(0);rn rn rn ~CInitWinSock()rn rn ::WSACleanup();rn rn;rnrnrnCInitWinSock initSock; //全局对象rnrnrnrnrnrnint main()rnrn // 创建套节字rn SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);rn if(s == INVALID_SOCKET)rn rn printf(" Failed socket() \n");rn return 0;rn rnrn // 也可以在这里调用bind函数绑定一个本地地址rn // 否则系统将会自动安排rnrn // 填写远程地址信息rn sockaddr_in servAddr; rn servAddr.sin_family = AF_INET;rn servAddr.sin_port = htons(9585);rn // 注意,这里要填写服务器程序(TCPServer程序)所在机器的IP地址rn // 如果你的计算机没有联网,直接使用127.0.0.1即可rn servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");rnrn while(::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)) == -1)rn rn Sleep(500);rn printf(" Failed connect() \n");rn continue;rnrn rnrn printf(" Success connect() \n");rnrn char buf[100];rn memset(buf,0,100);rnrn strcpy(buf,"hello");rnrnrn for(int i=0; i<50;i++)rnrn rn send(s,buf,100,0);rn Sleep(100);rn rnrnrnrnrn ZeroMemory(buf,sizeof(buf));rnrnrn recv(s,buf,sizeof(buf),0);rnrn printf("收到的数据为%s\n",buf);rnrnrnrn // 关闭套节字rn ::closesocket(s);rn return 0;rnrnrnrnrnrn[/code]
TCP 协议解析(服务端接受数据问题)
[img=http://hi.csdn.net/attachment/201008/18/159280_128211983720bT.jpg][/img]rn做个服务器,接受客户端发送过来的数据包。rn代码如下:rn[code=C/C++]rnrn#includern#includernrn#pragma comment(lib,"ws2_32.lib")rntypedef unsigned char BYTE;rntypedef BYTE near *PBYTE;//PBYTErnrnint main()rnrn WORD wVersionRequested;rn WSADATA wsaData;rn int err;rn wVersionRequested=MAKEWORD(1,1);rn err=WSAStartup(wVersionRequested,&wsaData);rn if(err!=0)rn rn return 0 ;rn rn rn if((LOBYTE(wsaData.wVersion) !=1) || (HIBYTE(wsaData.wVersion) !=1))rn rn WSACleanup();rn return 0;rn rn rn SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);rn rn SOCKADDR_IN addrSrv;rn addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);rn addrSrv.sin_family=AF_INET;rn addrSrv.sin_port=htons(8801);//6000rn // typedef struct sockaddr SOCKADDR;¡£rn bind(sockSrv,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR));rn listen(sockSrv,5);rn rn SOCKADDR_IN addrClient;rn int len=sizeof(SOCKADDR);rn rn while(1)rn rn SOCKET sockConn=accept(sockSrv,(SOCKADDR *)&addrClient,&len);rn rn /*3.intel little-endian */rn unsigned char sendBuf[]=0x25,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x01,rn 0x00,0x00,0x80,0x3F, 0x00,0x00,0x0C,0x41, 0x00,0x00,0x00,0x01, 0x00,0x00,0x00,0x01,rn 0x00,0x00,0x00,0x40, 0x00,0x00,0x0C,0x41, 0x00,0x00,0x00,0x01, 0x00,0x00,0x00,0x01,rn 0x12,0x34,0x56,0x78, 0x5A,0x5A;rn rn printf("%d %d\n",sizeof(sendBuf),strlen((char *)sendBuf)); rn send(sockConn,(char *)sendBuf,sizeof(sendBuf)+1,0);rn char recvBuf[300*1024];rn recv(sockConn,recvBuf,300*1024,0);rn PBYTE p=(unsigned char *)recvBuf;rn /* 3. intel little=endian */ rn for(unsigned int i=9;i<(*((unsigned int *)&p[0])+4);i+=16)rn rn float fDistance=*((float*)&p[i]);//¾àÀë intel little=endianrn float fTemperture=*((float*)&p[i+4]);//ÎÂ¶È intel little-endianrn printf("%.8f %.8f\n",fDistance,fTemperture);rn/* 20100727 */rn FILE *stream;rn// unsigned char list[20000];rn float list[20000];rn int numwritten;rn //////rn if( (stream = fopen( "fread.out", "w+t" )) != NULL )rn rn // for ( i = 0; i < 25; i++ )rn //list[i] = (unsigned char)(p[i]);rn list[i] =*((float*)&p[i]);rn numwritten = fwrite(list,4,20000,stream);rn fclose( stream );rn rn rn closesocket(sockConn);rn rnrn[/code]
客户端socket接受服务端数据的问题
请教高手,我用的是异步如何接受服务端的数据,我是新手最好给代码我看
python使用TCP服务端发送接受数据
import socket # 创建套接字 tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定本地信息 tcp_server_socket.bind(("", 7890)) # listen 监听 tcp_server_socket.listen(128) # 等待客户端的链接 accept ne...
php做服务端接受数据问题
底层不太懂队友做的只能发送http报文[img=https://img-bbs.csdn.net/upload/201403/20/1395326326_745887.jpg][/img]data中的数据是要读取的,我应该怎么与他进行通信啊!我尝试用curl读取可是不成功rn[code=php]curl_setopt($ch, CURLOPT_URL,"192.168.16.254:8080");rn curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);rn //要求保存到字符串还是输出到屏幕上,1隐藏rn curl_setopt($ch, CURLOPT_TIMEOUT, 1);//最多获取一秒的信息rn curl_setopt($ch, CURLOPT_HEADER, 0);rn echo $output = curl_exec($ch);rn curl_close($ch);[/code]rn求指导。
C# Socket 服务端接受数据偶尔丢失
C# Socket 发送消息和接受消息。rn开始只是发送文字,定义100*1024字节数组,一次性发送不会丢失,现在需求变了,要发送的有图片,如果内容过多会出现 [color=#FF0000]"一个在数据报套接字上发送的消息大于内部消息缓冲区或其他一些网络限制,或该用户用于接收数据报的缓冲区比数据报小"[/color]rn现在我分批发送 在后一次发送的时候标识一下.rnrn我测试 10次基本有5次接不到信息,原因是客户端发送10或者100次,而服务段老是接受4次,如果发消息和图片发送成功了, 服务端接受的次数和客服端发送的次数一样.什么情况会出现这样问题呢?rnrn我在虚拟机里面断电调试服务端,在自己的电脑调试客户端。
android socket通信读取图片数据,数据出错
我从电脑服务端用imageIO发送了屏幕的截图给android,android端发现如果每次读取n的数据大小超过20K,所得的数据就会出错,我对比了下发送前的图片数据,基本上是n夹杂了很多1K以上的0数据块,又或者是数据块错位。但是一旦把每次读取的数据大小降n低至10K以下又或者增加两次读取间的间隔至500ms以上就能保持数据不出错,这是为什n么呢?
socket通信,对话框显示接受情况
socket通信,对话框mfc显示接收发送情、、、、、、、、、
winsock 服务端接受问题
请问高手们 winsock 做的服务端 第一次能正常接收客户端的图片,为什么第二次接收就错误(实时错误52),winsock缓存需要清空吗?最好能给几行代码
服务端接受的是乱码
发送的代码:rnprocedure TForm1.Button1Click(Sender: TObject);rnvarrn i:integer;rn buffer:array of byte;rn ls_sedstr:string;rn li_len:integer;rnbeginrn ls_sedstr:='h';rn li_len:=length(ls_sedstr);rn setlength(buffer,li_len);rn copymemory(@buffer[0],@ls_sedstr[1],li_len);rn for i:=0 to ServerS.Socket.ActiveConnections-1 dorn beginrn ServerS.Socket.Connections[i].SendBuf(buffer,li_len);rn end; rnend;rn接受的代码:rnprocedure TForm1.ClientSRead(Sender: TObject; Socket: TCustomWinSocket);rnvarrn buffer:array of byte;rn ls_recstr:string;rn li_len:integer;rnbeginrn li_len:= Socket.ReceiveLength;rn setlength(ls_recstr,li_len);rn setlength(buffer,li_len);rn Socket.ReceiveBuf(buffer[0],li_len);rn copymemory(@ls_recstr[1],@buffer[0],li_len);rn showmessage(ls_recstr);rnend;rn仅仅作了一个测试的例子,rn结果ls_recstr是乱码,请问大家如何解决,那儿出错?
android socket接受数据很慢
[code=Java]rndout = new DataOutputStream(socketclient.getOutputStream());rn dout.write(buffer, offset, length);rn dout.flush();rndin = new DataInputStream(socketclient.getInputStream());rnwhile (din.read(dReceive) != -1) rn rn[/code] rn发送完成之后直接去接受,当运行到din.read(dReceive)这时 就卡住了,大概五分钟之后才会有反应rn求指教
Android Socket通信
Android Socket通信,分个客服端了服务器端,
android socket通信
android socket通信相关资料
android Socket通信
代码包含完整的客户端和服务端,可以直接引入项目,也可以根据实际情况复制文件
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法