zoukankan      html  css  js  c++  java
  • C++做client Java做客户端传送数据

    因为要用到,但发现Java怎么都收不到C发来的数据,除非C端自动挂掉,java会一口气全收回来。

    后来才发现是因为C发过来的Java用readline是读不到回车的,所以会一直等待。

    所以不要用readline(),这是不正确滴。

    具体应该如下:

    Java Server端:

     1 package jsi;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.IOException;
     5 import java.io.InputStreamReader;
     6 import java.io.PrintWriter;
     7 import java.net.ServerSocket;
     8 import java.net.Socket;
     9 
    10 public class MyServer {
    11 
    12     public ServerSocket server;
    13             
    14     public MyServer(){
    15         new Thread(new Runnable(){
    16             private ServerSocket server;
    17 
    18             @Override
    19             public void run(){
    20                 try {
    21                     server = new ServerSocket(31003);
    22                     Socket socket = server.accept();
    23                     BufferedReader read = new BufferedReader(new 
    24                             InputStreamReader(socket.getInputStream()));
    25                     PrintWriter print = new PrintWriter(socket.getOutputStream());
    26                     while(true){
    27                         char[] cbuf = new char[70];
    28                         read.read(cbuf);   // don't use : String msg = read.readline();
    29                         String msg = new String(cbuf);
    30                         if(msg.equals("bye")){
    31                             break;
    32                         }
    33                         print.write("OK");
    34                         print.flush();
    35                         double mm = Double.parseDouble(msg);
    36                         System.out.println(mm);
    37                         
    38                     }
    39                 } catch (IOException e) {
    40                     // TODO Auto-generated catch block
    41                     e.printStackTrace();
    42                 }
    43             }
    44             
    45         }).start();
    46     }
    47     /**
    48      * @param args
    49      */
    50     public static void main(String[] args) {
    51         // TODO Auto-generated method stub
    52         new MyServer();
    53     }
    54 
    55 }

    C++客户端:

    /*
     * Client.cpp
     *
     *  Created on: 2013-11-29
     *      Author: root
     */
    
    #include <errno.h>
    #include <netinet/in.h>    // for sockaddr_in
    #include <sys/types.h>    // for socket
    #include <sys/socket.h>    // for socket
    #include <stdio.h>        // for printf
    #include <stdlib.h>        // for exit
    #include <string.h>        // for bzero
    #include <arpa/inet.h>
    #include <unistd.h>
    #include <string>
    #define SERVER_PORT 31003
    #define MAXDATA 50
    int main(int argc, char **argv)
    {
        struct sockaddr_in client_addr;
        bzero(&client_addr, sizeof(client_addr)); //set zero of this memory
        client_addr.sin_family = AF_INET; //internet protocol
        client_addr.sin_addr.s_addr = htons(INADDR_ANY); //INADDR_ANY means get the local address
        client_addr.sin_port = htons(0); //0 means get a free port
    
        int client_socket = socket(AF_INET, SOCK_STREAM, 0);
        if (client_socket < 0)
        {
            printf("Create Socket Failed!
    ");
            exit(1);
        }
        //bind the socket and ip address of the client machine
        if (bind(client_socket, (struct sockaddr*) &client_addr,
                sizeof(client_addr)))
        {
            printf("Client Bind Port Failed!
    ");
            exit(1);
        }
    
        //socket struct had the server_addr and server port
        struct sockaddr_in server_addr;
        bzero(&server_addr, sizeof(server_addr));
        server_addr.sin_family = AF_INET;
        if (inet_aton("127.0.0.1", &server_addr.sin_addr) == 0)
        {
            printf("Server IP Address Error! 
    ");
            exit(1);
        }
        server_addr.sin_port = htons(SERVER_PORT);
        socklen_t server_addr_length = sizeof(server_addr);
        if (connect(client_socket, (struct sockaddr*) &server_addr,
                server_addr_length) < 0)
        {
            printf("Can Not Connect To localhost!
    ");
            exit(1);
        }else
             printf("connect successful! 
    ");
        std::string buffer;
        char buf[MAXDATA];
        bool flag = false;
        while(1){
            buffer = flag == true ? "13" : "10";
         if(write(client_socket,buffer.c_str(),buffer.length()) == -1)
            {
                perror("send error!");
                exit(1);
            }
            sleep(1);
            flag = !flag;
            if((recv(client_socket, buf, MAXDATA,0)) == -1)
                    {
                        perror("receive error!");
                        exit(1);
                    }
    
                            printf("Received: %s
    ",buf);
        }
    }
  • 相关阅读:
    Linux系统管理
    Linux命令—压缩及其他
    Linux命令—文件目录
    SQL基本函数
    35.app后端搜索入门
    Java-希尔排序
    Android 显示意图和隐式意图的差别
    做webapp 使用JS来检測游览器是什么类型,或android是什么版本
    用iframe在您的站点中增加findjar的功能
    HDU 4026 Unlock the Cell Phone( 状态压缩 )
  • 原文地址:https://www.cnblogs.com/dorothychai/p/3448614.html
Copyright © 2011-2022 走看看