c++程序和java程序socket通信Android

本文介绍了一个使用Java和C++实现的本地Socket通信案例。Java端作为服务端启动了一个LocalServerSocket监听特定名称的连接请求,而C++端作为客户端尝试连接到这个指定名称的Socket。Java端通过循环不断接收来自C++客户端的信息并打印。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java服务端程序放到public void onCreate(Bundle savedInstanceState) {里面
      //======================localsocket通信机制======================================================
      // 接收线程
      Thread local_receive2 = new Thread(){
          @Override
          public void run() {
              try {
                  LocalServerSocket server2 = new LocalServerSocket("crl.localsocket");
                  //定义的名字crl.localsocket,对应native层
                  LocalSocket receiver2 = null;
                  InputStream in = null;
                  DataInputStream din = null;
         boolean ruing =true;
                  while (ruing) {
                      receiver2 = server2.accept();
                      in = receiver2.getInputStream();  //获取输入流,并创建相应的数据输入流
                      din = new DataInputStream(in);
                      if (receiver2 != null) {
                          String s1 = din.readLine();  //读入传来的字符串
                          Log.i("socket", "s1 ="+s1);
                        //  threadin(s1,2);
                      }
                  }
                  din.close();
                  in.close();
                  receiver2.close();
                  server2.close();
              } catch (IOException e) {
              }
          }
      };

local_receive2.start();

 

 

c++程序客服端
#include <stdio.h>
#include <string.h>
#include<stdarg.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdlib.h>
void send_remote_request(char *msg)
{
    int localsocket, len;
    struct sockaddr_un remote;
    if ((localsocket = socket(AF_UNIX,SOCK_STREAM, 0)) == -1) {
     printf("fail 1\n");
    exit(1);
    }
    char *name="crl.localsocket";//与java层相同
    remote.sun_path[0] = '\0'; 
    strcpy(remote.sun_path+1, name);
    remote.sun_family = AF_UNIX;
    int nameLen = strlen(name);
    len = 1 + nameLen + offsetof(struct sockaddr_un, sun_path);
    if (connect(localsocket, (struct sockaddr *)&remote, len) == -1) {
     printf("fail 2\n");
    return;
    }
   
    if (send(localsocket, msg,strlen(msg),0) == -1) {
     printf("fail 3\n");
    return;
    }
   
    close(localsocket);
}
int main ()
{
char * str1="add_by_crl_for_test_socket";
while(1){
send_remote_request(str1);
usleep(100*1000);
}
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值