標籤:
接收資料不要用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());
}
android之socket用戶端