Android客户端插座,如何读取数据?插座、客户端、数据、Android

2023-09-04 10:38:22 作者:一世浮沉╮

这是我完全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();
 
论坛转帖 Tenorshare Android Data Recovery Pro 手机恢复数据软件 4.0 官方特别版

这是我们的Andr​​oid客户端的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.