本文介绍了Android客户端插座,如何读取数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我完全code:的CNX成立,我将数据发送到服务器上,但我不能从服务器读取什么...
公共类客户端扩展活动
{
/ **第一次创建活动时调用。 * /
插座袜子;
串spliter =**;
字符串mobileNbr =100;
串LastJOKEId =-1;
字符串spliterlast =^^ $$;
BufferedReader类inFromServer;
DataOutputStream类outToServer;
TextView的CNX;
TextView的输出;
@覆盖
公共无效的onCreate(包savedInstanceState)
{
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
setupNetworking();
//线程readerThread =新主题(新IncomingReader());
// readerThread.start();
}
私人无效setupNetworking()
{
尝试
{
Log.i(ClientActivity,连接...);
袜子=新的Socket(192.168.153.221,9003);
CNX =(TextView中)findViewById(R.id.textView1);
cnx.setText(网络建立起来。);
inFromServer =新的BufferedReader(新的InputStreamReader(sock.getInputStream()));
Log.i(ClientActivity,发送命令。);
outToServer =新DataOutputStream类(sock.getOutputStream());
串句=登录+ spliter + mobileNbr + spliter + LastJOKEId + spliterlast;
outToServer.writeBytes(句+'\ N');
Log.i(ClientActivity,已发送);
}
赶上(UnknownHostException异常E)
{
e.printStackTrace();
}
赶上(IOException异常E)
{
CNX =(TextView中)findViewById(R.id.textView1);
cnx.setText(网络故障);
e.printStackTrace();
}
}
公共类IncomingReader实现Runnable
{
字符串消息;
公共无效的run()
{
尝试
{
而((消息= inFromServer.readLine())!= NULL)
{
输出=(TextView中)findViewById(R.id.textView2);
output.setText(消息);
}
}
赶上(IOException异常E)
{
输出=(TextView中)findViewById(R.id.textView2);
output.setText(n次,以显示);
// TODO自动生成的catch块
e.printStackTrace();
}
}
}
}
解决方案
包中的一些;
进口java.io.BufferedReader中;
进口java.io.IOException异常;
进口java.io.InputStreamReader中;
进口的java.io.PrintWriter;
进口的java.net.Socket;
公共类NetClient {
/ **
*缓冲区的最大大小
* /
公共静态最终诠释BUFFER_SIZE = 2048;
私人Socket套接字= NULL;
私人PrintWriter的输出= NULL;
私人的BufferedReader在= NULL;
私人字符串主机= NULL;
私人字符串MACADDRESS = NULL;
私人诠释端口= 7999;
/ **
*构造与主机,端口和MAC地址
* @参数主机
* @参数口
* @参数MACADDRESS
* /
公共NetClient(字符串主机,INT口,串MACADDRESS){
this.host =主机;
this.port =口;
this.macAddress = MACADDRESS;
}
私人无效connectWithServer(){
尝试 {
如果(插座== NULL){
插座=新的Socket(this.host,this.port);
OUT =的新PrintWriter(socket.getOutputStream());
在=新的BufferedReader(新的InputStreamReader(socket.getInputStream()));
}
}赶上(IOException异常E){
e.printStackTrace();
}
}
私人无效disConnectWithServer(){
如果(插座!= NULL){
如果(socket.isConnected()){
尝试 {
附寄();
out.close();
socket.close();
}赶上(IOException异常E){
e.printStackTrace();
}
}
}
}
公共无效sendDataWithString(字符串消息){
如果(消息!= NULL){
connectWithServer();
out.write(消息);
了out.flush();
}
}
公共字符串receiveDataFromServer(){
尝试 {
字符串消息=;
INT charsRead = 0;
的char []缓冲区=新的char [BUFFER_SIZE];
而((charsRead = in.read(缓冲液))!= - 1){
消息+ =新的String(缓冲).substring(0,charsRead);
}
disConnectWithServer(); //断开服务器
返回消息;
}赶上(IOException异常E){
返回错误收到的回应:+ e.getMessage();
}
}
}
// ---------------------------使用NetClient ---------------- --------------------------------
NetClient NC =新NetClient(主机,端口,MAC); // MAC地址可能不适合你
nc.sendDataWithString(数据);
字符串R = nc.receiveDataFromServer();
这是我们的Android客户端的Socket正常工作与Python的服务器套接字,希望它会帮助你。
here's my full code: the cnx is established , and i am sending data to server , but i cant read anything from the server...
public class client extends Activity
{
/** Called when the activity is first created. */
Socket sock;
String spliter = "**";
String mobileNbr = "100";
String LastJOKEId = "-1";
String spliterlast = "^^$$";
BufferedReader inFromServer;
DataOutputStream outToServer;
TextView cnx;
TextView output;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupNetworking();
// Thread readerThread=new Thread(new IncomingReader());
// readerThread.start();
}
private void setupNetworking()
{
try
{
Log.i("ClientActivity", "Connecting...");
sock = new Socket("192.168.153.221", 9003);
cnx = (TextView) findViewById(R.id.textView1);
cnx.setText("Network Established.");
inFromServer = new BufferedReader(new InputStreamReader(sock.getInputStream()));
Log.i("ClientActivity", "Sending command.");
outToServer = new DataOutputStream(sock.getOutputStream());
String sentence = "logins" + spliter + mobileNbr + spliter + LastJOKEId + spliterlast;
outToServer.writeBytes(sentence + '\n');
Log.i("ClientActivity", "Sent.");
}
catch (UnknownHostException e)
{
e.printStackTrace();
}
catch (IOException e)
{
cnx = (TextView) findViewById(R.id.textView1);
cnx.setText("Network failed");
e.printStackTrace();
}
}
public class IncomingReader implements Runnable
{
String message;
public void run()
{
try
{
while ((message = inFromServer.readLine()) != null)
{
output = (TextView) findViewById(R.id.textView2);
output.setText(message);
}
}
catch (IOException e)
{
output = (TextView) findViewById(R.id.textView2);
output.setText("nth to display");
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
解决方案
package some;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class NetClient {
/**
* Maximum size of buffer
*/
public static final int BUFFER_SIZE = 2048;
private Socket socket = null;
private PrintWriter out = null;
private BufferedReader in = null;
private String host = null;
private String macAddress = null;
private int port = 7999;
/**
* Constructor with Host, Port and MAC Address
* @param host
* @param port
* @param macAddress
*/
public NetClient(String host, int port, String macAddress) {
this.host = host;
this.port = port;
this.macAddress = macAddress;
}
private void connectWithServer() {
try {
if (socket == null) {
socket = new Socket(this.host, this.port);
out = new PrintWriter(socket.getOutputStream());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
} catch (IOException e) {
e.printStackTrace();
}
}
private void disConnectWithServer() {
if (socket != null) {
if (socket.isConnected()) {
try {
in.close();
out.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void sendDataWithString(String message) {
if (message != null) {
connectWithServer();
out.write(message);
out.flush();
}
}
public String receiveDataFromServer() {
try {
String message = "";
int charsRead = 0;
char[] buffer = new char[BUFFER_SIZE];
while ((charsRead = in.read(buffer)) != -1) {
message += new String(buffer).substring(0, charsRead);
}
disConnectWithServer(); // disconnect server
return message;
} catch (IOException e) {
return "Error receiving response: " + e.getMessage();
}
}
}
//---------------------------Use NetClient------------------------------------------------
NetClient nc = new NetClient(host, port, mac); //mac address maybe not for you
nc.sendDataWithString("your data");
String r = nc.receiveDataFromServer();
This is our android socket client works fine with Python server socket, Hope it will help you.
这篇关于Android客户端插座,如何读取数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!