qq_36665592 2017-11-28 03:12 采纳率: 50%
浏览 1189

java怎么通过Socket向C++拿数据

图片说明

  • 写回答

1条回答 默认 最新

  • 虛擬時間SOS 2017-11-28 04:17
    关注

    java socket 方式发送请求到指定主机(C程序客户端 为服务端),然后进入接受数据; 服务端等待请求,得到请求后进行相应;(要统一数据编码)
    import java.net.*;
    import java.io.*;
    public class MyConnection2
    {
    public static void main(String[] args) throws Exception
    {
    Socket socket = new Socket("www.ptpress.com.cn", 80);
    // 向服务端程序发送数据
    OutputStream ops = socket.getOutputStream();

    OutputStreamWriter opsw = new OutputStreamWriter(ops);
    BufferedWriter bw = new BufferedWriter(opsw);

    bw.write("hello world\r\n\r\n");
    bw.flush();
    
    // 从服务端程序接收数据
    InputStream ips = socket.getInputStream();
    InputStreamReader ipsr = new InputStreamReader(ips);
    BufferedReader br = new BufferedReader(ipsr);
    String s = "";    
    while((s = br.readLine()) != null)
      System.out.println(s);    
    socket.close();
    

    }
    }

    C 客户端
    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #define MYPORT 3490 /*定义用户连接端口*/

    #define BACKLOG 10 /*多少等待连接控制*/

    main()

    {

      int sockfd, new_fd; /* listen on sock_fd, new connection on new_fd */

      struct sockaddr_in my_addr; /* my address information */

      struct sockaddr_in their_addr; /* connector's address information */

      int sin_size;

      if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {

      perror("socket");

      exit(1);

      }

      my_addr.sin_family = AF_INET; /* host byte order */

      my_addr.sin_port = htons(MYPORT); /* short, network byte order */

      my_addr.sin_addr.s_addr = INADDR_ANY; /* auto-fill with my IP */

      bzero(&(my_addr.sin_zero),; /* zero the rest of the struct */

      if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))== -1) {

      perror("bind");

      exit(1);

      }

      if (listen(sockfd, BACKLOG) == -1) {

      perror("listen");

      exit(1);

      }

      while(1) { /* main accept() loop */

      sin_size = sizeof(struct sockaddr_in);

      if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) {

      perror("accept");

      continue;

      }

      printf("server: got connection from %s\n", \

      inet_ntoa(their_addr.sin_addr));

      if (!fork()) { /* this is the child process */

      if (send(new_fd, "Hello, world!\n", 14, 0) == -1)

      perror("send");

      close(new_fd);

      exit(0);

      }

      close(new_fd); /* parent doesn't need this */

      while(waitpid(-1,NULL,WNOHANG) > 0); /* clean up child processes */

    }

    }

    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作