Android 建立Socket接收服务端数据,JAVA建立Socket服务端发送数据

发布时间:2024年01月11日

Android 建立Socket客户端接受服务端发送的数据

public class MainActivity extends AppCompatActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      new Thread(){
         @Override
         public void run() {
            super.run();
            try {
               // 创建Socket对象,指定服务器的IP地址和端口号
               Socket socket = new Socket("自己的IP", 端口号);
               // 获取输入流,用于接收服务器发送的消息
               InputStream is = socket.getInputStream();
               while (true){
                  byte []b =new byte[1024];//采用byte数组 按字节进行数据的接收  避免readline()方法的阻塞机制!! 弊端是接受字节长度受限,但是在这个项目中足够了
                  int x= is.read(b, 0, b.length);//相较于readline()读取数据  字节读取慢  不适合大量数据的通信
                  if (x!=-1){
                     String string=new String(b, 0, x);
                     Log.d("onmessage", "run: "+string);
                  }else{
                     Log.d("onmessage", "run: "+x);
                  }
               }

            } catch (IOException e) {
               e.printStackTrace();
            }
         }
      }.start();

   }


}

?获取数据时候我使用的是inputStream.read,读取效率没有readLine()高,readLine()使用时候需要分隔符,不然会发生阻塞的情况,无法获取到准确的数据,自己按需使用

下面附带后端代码

public static void main(String[] args) throws IOException, InterruptedException {
        ServerSocket server = new ServerSocket(8081);


        while (true) {
            Socket socket = server.accept();
            // 发送数据
            System.out.println("成功连接");
            OutputStream outputStream = socket.getOutputStream();
            String message = "Hello, server!";
            outputStream.write(message.getBytes());
            outputStream.write(s.getBytes());
// 休眠一段时间,以模拟长连接

            Thread.sleep(1000);
        }
    }

使用ServerSocket作为服务端,传入自己的端口号模拟长链接,当有客户端链接后,会在控制台输出连接成功字样,并发送"Hello,server!"的字样

到此一个简单的链接就完成了,后续可以自己封装成对应的方法类或增加接口更改自己的业务逻辑

文章来源:https://blog.csdn.net/z1935592892/article/details/135506130
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。