Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为C+实现Java TCP客户端+;服务器_Java_C++_Tcp_Client Server - Fatal编程技术网

为C+实现Java TCP客户端+;服务器

为C+实现Java TCP客户端+;服务器,java,c++,tcp,client-server,Java,C++,Tcp,Client Server,我正在尝试实现一个TCP服务器客户端应用程序。服务器用C++编写,客户端是java。 TCP服务器使用的是CURL和Mozilla浏览器,而不是CHROME和Java客户端 客户端脚本能够命中服务器,但无法从服务器消息中检索响应和打印 Client.java //client side import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.

我正在尝试实现一个TCP服务器客户端应用程序。服务器用C++编写,客户端是java。
  • TCP服务器使用的是CURL和Mozilla浏览器,而不是CHROME和Java客户端
  • 客户端脚本能够命中服务器,但无法从服务器消息中检索响应和打印 Client.java

    //client side 
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.io.UnsupportedEncodingException;
    
    public class Client {
    
        public static void main(String[] args) {
    
            URL url = null;
            try {
                url = new URL("http://192.168.1.101:12345");
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            BufferedReader reader = null;
            try {
                reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            try {
                for (String line; (line = reader.readLine()) != null;) {
                    System.out.println(line);
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
    }
    
    server.cpp

    
    // Server side C/C++ program to demonstrate Socket programming 
    #include <unistd.h> 
    #include <stdio.h> 
    #include <sys/socket.h> 
    #include <stdlib.h> 
    #include <netinet/in.h> 
    #include <string.h> 
    #define PORT 12345
    int main(int argc, char const *argv[]) 
    { 
        int server_fd, new_socket, valread; 
        struct sockaddr_in address; 
        int opt = 1; 
        int addrlen = sizeof(address); 
        char buffer[1024] = {0}; 
        char *hello = "Hello from server"; 
    
        // Creating socket file descriptor 
        if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) 
        { 
            perror("socket failed"); 
            exit(EXIT_FAILURE); 
        } 
    
        // Forcefully attaching socket to the port 8080 
        if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, 
                                                    &opt, sizeof(opt))) 
        { 
            perror("setsockopt"); 
            exit(EXIT_FAILURE); 
        } 
        address.sin_family = AF_INET; 
        address.sin_addr.s_addr = INADDR_ANY; 
        address.sin_port = htons( PORT ); 
    
        // Forcefully attaching socket to the port 8080 
        if (bind(server_fd, (struct sockaddr *)&address, 
                                    sizeof(address))<0) 
        { 
            perror("bind failed"); 
            exit(EXIT_FAILURE); 
        } 
        if (listen(server_fd, 3) < 0) 
        { 
            perror("listen"); 
            exit(EXIT_FAILURE); 
        } 
        if ((new_socket = accept(server_fd, (struct sockaddr *)&address, 
                        (socklen_t*)&addrlen))<0) 
        { 
            perror("accept"); 
            exit(EXIT_FAILURE); 
        } 
        valread = read( new_socket , buffer, 1024); 
        printf("%s\n",buffer ); 
        send(new_socket , hello , strlen(hello) , 0 ); 
        printf("Hello message sent\n"); 
        return 0; 
    } 
    

    您的服务器使用无效的HTTP响应进行响应


    要么使它有效,要么使您的客户端不期望它(使用普通套接字代替HTTP客户端)

    在server.cpp文件中,更改:

    char *hello = "HTTP/1.1 200 OK\r\nContent-Length: 17\r\nContent-Type: text/html\r\n\r\nHello from server"; 
    

    您的Java程序正在发出HTTP请求,并期望得到有效的HTTP响应。“Hello World”不是有效的Http响应。您必须在服务器上返回有效的HTTP响应,或者查看Java客户端上的正常TCP连接。取决于您想要实现什么。我猜是原始TCP连接Hi,我试过使用简单的TCP java客户端,但也无法从服务器获取数据。
    char *hello = "HTTP/1.1 200 OK\r\nContent-Length: 17\r\nContent-Type: text/html\r\n\r\nHello from server";