返回首页

android socket 接收服务器返回数据,如何查找想要的数值?

来源:www.muyeseed.com   时间:2023-01-20 16:27   点击:186  编辑:admin   手机版

Android 客户端代码:

package com.ltb.SCActivity;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.Socket;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

public class SCActivity extends Activity {

private TextView mRecvText = null;

private EditText mSentText = null;

private Button mSendRecvButton = null;

private Socket mSocket = null;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mRecvText = (TextView)findViewById(R.id.recvText);

mSentText = (EditText)findViewById(R.id.sentText);

mSendRecvButton = (Button)findViewById(R.id.sendRecvButton);

mSendRecvButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

String sentMessage = mSentText.getText().toString() + \r\n;

try {

mSocket = new Socket(10.126.38.155, 12577);

Log.i(------SCActivity---before send---, sentMessage);

PrintWriter send = new PrintWriter(new BufferedWriter(new OutputStreamWriter(mSocket.getOutputStream())));

send.println(sentMessage);

send.flush(); //Important!!!!!!

//send.write(sentMessage);

Log.i(------SCActivity---after send---, sentMessage);

BufferedReader recv = new BufferedReader(new InputStreamReader(mSocket.getInputStream()));

Log.i(------SCActivity---Before ---recv.readLine()---, sentMessage);

String recvMsg = recv.readLine();

Log.i(------SCActivity---after ---recv.readLine()---, recvMsg);

if (recvMsg != null) {

mRecvText.setText(recvMsg);

} else {

mRecvText.setText(Cannot receive data correctly.);

}

send.close();

recv.close();

mSocket.close();

} catch (Exception ex) {

ex.printStackTrace();

}

}

});

}

服务器端代码:

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class Server implements Runnable {

public void run() {

try {

ServerSocket serverSocket = new ServerSocket(12577);

while (true) {

Socket client = serverSocket.accept();

System.out.println(accept);

try {

BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

String str = in.readLine();

System.out.println(read: + str);

PrintWriter pout = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);

//pout.write(Server Received Message: + str);

pout.println(Server Received Message: + str);

System.out.println(after send in server);

/* BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

String str = in.readLine();

System.out.println(read: + str);*/

pout.close();

in.close();

} catch (Exception e) {

System.out.println(e.getMessage());

e.printStackTrace();

} finally {

client.close();

System.out.println(close);

}

}

} catch (Exception e) {

System.out.println(e.getMessage());

}

}

public static void main(String argv[] ) {

Thread pcServerThread = new Thread(new Server());

pcServerThread.start();

}

}

从服务器(encode编码)接收到本地(进行decode解码)。如:服务器的数据name:Android,number:1234本地解码后可通过String.split(,)分割后的字符数组,从分割后的字符数组里将值存储到sqlite中。

先用个文件把接收数据存起来,之后再解析数据。好处,不阻塞Socket通道,不丢数据。

拆包发送,过来之后再组包...应该是这样,你去查查资料!

顶一下
(0)
0%
踩一下
(0)
0%
上一篇:返回栏目
下一篇:返回栏目