接收数据不要用readline(),用read()

Socket mSocket = new Socket("192.168.1.100", 8888);

DataInputStream dinput = new DataInputStream(mSocket.getInputStream())

读取服务端发过来的数据:

int length = dinput.read(bbuf);
String mStrMSG = new String(bbuf, 0, length, "gb2312");

package com.example.tcp_client;
import java.io.DataInputStream;
import java.io.PrintWriter;
import java.net.Socket; import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.util.Log; @SuppressLint("NewApi") public class TCPClient implements Runnable{
private static final String SERVERIP = "192.168.1.100";
private static final int SERVERPORT = ;
private Thread mThread = null;
private static Socket mSocket = null;
private DataInputStream dinput;
private static PrintWriter mPrintWriter = null;
private static String mStrMSG = "";
private static String TAG = "TCPClient";
//接收线程发送过来信息,并用TextView显示
public Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
Log.e("服务器说:", mStrMSG);
MainActivity.AppendText("服务器说:"+mStrMSG);
}
};
public void StartTCPClient(){
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build());
try
{
// ①Socket实例化,连接服务器
mSocket = new Socket(SERVERIP, SERVERPORT);
// ②获取Socket输入输出流进行读写操作
dinput=new DataInputStream(mSocket.getInputStream());
mPrintWriter = new PrintWriter(mSocket.getOutputStream(), true);
new Thread(TCPClient.this).start();
} catch (Exception e)
{
Log.e(TAG, e.toString());
}
} public static void SendToServer(String sendmsg){
mPrintWriter.print(sendmsg);
mPrintWriter.flush();
} /**
* 读取服务器发来的信息,并通过Handler发给UI线程
*/
public void run() {
try {
byte[] bbuf = new byte[];
while (true) { if (!mSocket.isClosed()) {
if (mSocket.isConnected()) {
if (!mSocket.isInputShutdown()) {
int length = dinput.read(bbuf);
mStrMSG = new String(bbuf, , length, "gb2312");
mStrMSG += "\n";
mHandler.sendMessage(mHandler.obtainMessage());
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

TCP服务端

使用实例化即可

try
{
tcpclient =new TCPClient();
tcpclient.StartTCPClient();
} catch (Exception e)
{
// TODO: handle exception
Log.e("MainActivity", e.toString());
}

Android之socket客户端的更多相关文章

  1. java版简易socket客户端

    android项目需要使用到心跳, 于是编写了一个简易的socket客户端程序 主要功能是给服务端发送心跳包,保持在线状态 没有使用框架,这样避免了需要引入包,直接使用的阻塞Socket通信. 主要逻 ...

  2. Android 基于Socket的聊天应用(二)

    很久没写BLOG了,之前在写Android聊天室的时候答应过要写一个客户(好友)之间的聊天demo,Android 基于Socket的聊天室已经实现了通过Socket广播形式的通信功能. 以下是我写的 ...

  3. Android 之 Socket 通信

    Android 之 Socket 通信 联系一下 Socket 编程,之后需要将一个 JavaEE 项目移植到 Android,暂时现尝试写一个简单的 DEMO,理解一下 Socket Server ...

  4. 基于android的Socket通信

    一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户 ...

  5. Android中Socket通信之TCP与UDP传输原理

    一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是"请求-响应方式",即在请求时 ...

  6. Android 通过Socket 和服务器通讯

    Extends:(http://www.cnblogs.com/likwo/p/3641135.html) Android 通过Socket 和服务器通讯,是一种比较常用的通讯方式,时间比较紧,说下大 ...

  7. Android连接socket服务器上传下载多个文件

    android连接socket服务器上传下载多个文件1.socket服务端SocketServer.java public class SocketServer { ;// 端口号,必须与客户端一致 ...

  8. Android 通过SOCKET下载文件的方法

    本文实例讲述了Android通过SOCKET下载文件的方法.分享给大家供大家参考,具体如下: 服务端代码 import java.io.BufferedInputStream; import java ...

  9. 基于Socket客户端局域网或广域网内共享同一短信猫收发短信的开发解决方案

    可使同一网络(局域网或广域网)内众多客户端,共享一个短信猫设备短信服务器进行短信收发,短信服务器具备对客户端的管理功能. 下面是某市建设银行采用本短信二次开发平台时实施的系统方案图: 在该方案中,考虑 ...

随机推荐

  1. 动手动脑(&课后实验):类和对象

    1. 以下代码为何无法通过编译?哪儿出错了? 如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法.而此时程序中已提供了一个有一个参数的构造函数,而定义对象时却没有参数,所以程序会报错. ...

  2. SQL数据库存储过程

    添加修改 create PROCEDURE sp_insert_1(pid int,pname varchar(200),page varchar(200),pscore int,out code i ...

  3. vue项目中别个访问你的本地调试需要改东西

  4. Mysql date,datetime的区别以及相互转换

    参考:https://blog.csdn.net/a3025056/article/details/62885104/ 在数据库中一直有这三个时间类型有点搞不太清楚. 今天就来说一下之间的区别,其实是 ...

  5. codeforces 980A Links and Pearls

    题意: 有珍珠和线,问能否重新安排使得相邻珍珠之间的线的数量相等. 思路: 首先,珍珠为0或者线为0,那么都满足条件: 其次,如果珍珠的个数大于线的个数,那么肯定不满足条件: 然后,如果线的个数能够被 ...

  6. GO富集分析

    GO的主要用途之一是对基因组进行富集分析.例如,给定一组在特定条件下上调的基因,富集分析将使用该基因组的注释发现哪些GO术语被过度表示(或未充分表示). 富集分析工具    用户可以直接从GOC网站的 ...

  7. 理解本真的 REST 架构风格

    1. http://kb.cnblogs.com/page/186516/ 2. http://www.infoq.com/cn/articles/rest-introduction 3. http: ...

  8. 20165305 苏振龙《Java程序设计》第六周学习总结

    第八章知识点 熟练掌握String类的常用方法. 掌握String类的和StringBuffer类的不同,以及二者之间的联系. 使用StringTokenizer,Scannner类分析字符串,获取字 ...

  9. 【转】Kylin系列-使用Saiku+Kylin构建多维分析OLAP平台

    关于Kylin的介绍和使用请参考之前的文章 <分布式大数据多维分析(OLAP)引擎Apache Kylin安装配置及使用示例> Kylin对外提供的是SQL查询接口,基于Kylin构建OL ...

  10. 【函数封装】javascript判断移动端操作系统为android 或 ios 或 iphoneX

    function isPhone(){ var u = navigator.userAgent, app = navigator.appVersion; var isAndroid = u.index ...