android之socket客户端

接收数据不要用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 = 8888;
    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[10000];
           while (true) {

               if (!mSocket.isClosed()) {
                   if (mSocket.isConnected()) {
                       if (!mSocket.isInputShutdown()) {
                           int length = dinput.read(bbuf);
                              mStrMSG = new String(bbuf, 0, 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());
}

时间: 2024-11-08 13:01:00

android之socket客户端的相关文章

android使用socket进行本地PC通信

一.编写思路 手机端为客户端,PC为服务端,手机访问PC通信,需建立一个虚拟的通信链路,客户端通过socket发送请求到服务端,服务端通过serversocket监听来自客户端的socket请求,并生成一个socket.这样就建立了一条虚拟通信网络,然后再通过相关方法进行通信.项目需在服务端建立一个java程序,客户端建立一个android程序. 二.代码编写 (一) PC端的代码编写--java程序 (1)相关方法 Socket accept() :如果接收到一个来自客户端的socket的连接

【android】Socket简单用法

原文地址:http://www.cnblogs.com/harrisonpc/archive/2011/03/31/2001565.html Socket通常也称做”套接字“,用于描述IP地址和端口,废话不多说,它就是网络通信过程中端点的抽象表示.值得一提的是,Java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端.这是两个封装得非常好的类,使用起来很方便! 下面将首先创建一个SocketServer的类作为服务端如下,该服务端实现

Android 使用Socket完成进程间通信

看一些Android应用,特别是涉及到底层的功能性的应用,比如游戏加速,修改内存,挂机脚本神马的,发现里面的通信机制无一例外的都是使用的socket,基本上已经成为这类应用的一种标配了. 因为这类应用有以下的几个共同点: 1 需要android 手机的root权限,毕竟要修改一些比较底层的东西,没有root权限有时候木有办法修改啊 2 有自己的so,同时比较重要的或者比较吃力的活都编译成一个可执行的elf文件,然后让apk应用给这个elf文件给启动起来.关于这个elf文件放置的位置也有几种选择.

Android 通过SOCKET下载文件的方法

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

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

android连接socket服务器上传下载多个文件1.socket服务端SocketServer.java public class SocketServer { int port = 8888;// 端口号,必须与客户端一致 // 选择进行传输的文件(测试) String path = "C:\\Temp"; String filePath = "E:\\img.png"; Socket client; public static void main(Strin

基于android的Socket通信

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

Android中socket初体验

最近要做一个Android的项目,用到socket和服务器之间交互,研究了一个小demo.主要遇到了以下几个问题: 1.客户端创建socket对象时一直失败NetworkOnMainThreadException,查了一下,原因是4.0之后在主线程中执行http请求会报这个错.解决办法是将代码放到了一个新线程中,问题就解决了. 2.服务器接收到客户端信息后反馈给客户端信息,将该信息表示在客户端UI上时报“android.view.ViewRoot$CalledFromWrongThreadExc

android 初识socket通信--java程序做服务器

1.新建一个java工程做服务器 public class MyServer { String str ; public MyServer(){ try { //服务器端的声明用serversocket,括号里面写端口号,端口号是自己指定的 ServerSocket ss = new ServerSocket(4700); //accept方法在这里会一直等待客户端连接进来 Socket accept = ss.accept(); //新建一个读入流,字符集是utf-8 BufferedRead

Android local socket学习总结

转载请注明出处: http://blog.csdn.net/xiexh0921/article/details/7513628 ############################################## 目的:实现本地 C程序与apk的socket通信. 原理:没有涉及到网络通信,所以使用Android封装的local socket要更简单 参考:系统源码RIL模块 整理:Andy.xie ############################################