Отправка и получение TCP-сокета android-клиента

#c# #java #android

#c# #java #Android

Вопрос:

Я написал клиент-серверное приложение c #, сервер отправляет данные с помощью socket.send (byte[]) и получает с помощью сокета.получение (байт []) теперь я хочу отправлять и получать с Android и совершенно новый для Android.

я ценю любую помощь.

Ответ №1:

 //client side        
        Socket sendChannel=new Socket("localhost", 12345);
        OutputStream writer=sendChannel.getOutputStream();
        writer.write(new byte[]{1});
        writer.flush();

        InputStream reader=sendChannel.getInputStream();
        byte array[]=new byte[1];
        int i=reader.read(array);

//server side
        ServerSocket s=new ServerSocket(12345);
        Socket receiveChannel = s.accept();

        OutputStream writerServer=receiveChannel.getOutputStream();
        writer.write(new byte[]{1});
        writer.flush();

        InputStream readerServer=receiveChannel.getInputStream();
        byte array2[]=new byte[1];
        int i2=reader.read(array);
  

Ответ №2:

Вы можете использовать TCP-сокет и входной поток для чтения данных в отдельном потоке из основного потока приложения в вашем Android-приложении следующим образом:

 // Start a thread
new Thread(new Runnable() {
 @Override
 public void run() {
 // Open a socket to the server
 Socket socket = new Socket("192.168.1.1", 80);
 // Get the stream from which to read data from
 // the server
 InputStream is = socket.getInputStream();
 // Buffer the input stream
 BufferedInputStream bis = new BufferedInputStream(is);
 // Create a buffer in which to store the data
 byte[] buffer = new byte[1024];
 // Read in 8 bytes into the first 8 bytes in buffer
 int countBytesRead = bis.read(buffer, 0, 8);
 // Do something with the data

 // Get the output stream from the socket to write data back to the server
 OutputStream os = socket.getOutputStream();
 BufferedOutputStream bos = new BufferedOutputStream(os);
 // Write the same 8 bytes at the beginning of the buffer back to the server
 bos.write(buffer, 0, 8);
 // Flush the data in the socket to the server
 bos.flush();
 // Close the socket
 socket.close();
}
});
  

Вы можете обернуть входной поток в различные другие типы потоков, если хотите читать в многобайтовых значениях, таких как короткие или целые числа (DataInputStream). Они позаботятся о преобразовании из сетевого интерфейса в собственный интерфейс клиента.

Вы можете получить выходной поток из сокета для записи данных обратно на сервер.

Надеюсь, это поможет.