首页 > 解决方案 > Java 服务器未通过套接字接收 C++ 客户端

问题描述

我正在创建一个项目,其中C++ 客户端需要通过两个程序之间的 Socket 连接将字符串发送到Java Server 。当我运行服务器和客户端程序时,两者之间成功建立了连接。但是,当我尝试将用户输入从 C++ 程序发送到 Java 程序时,Java 服务器没有收到该消息。我对套接字编程比较陌生,所以我提前为任何愚蠢的错误道歉。

然而,令人惊讶的是,从服务器发送的消息似乎被客户端接收到了。

Java 服务器:

public class EchoServer {
    public static void main(String[] args) throws IOException {
    if (args.length < 1) {
        System.err.println("Usage: java EchoServer <port number>");
        System.exit(1);
    }
    System.out.println("Server started. Listening on Port 54000" );
    int portNumber = Integer.parseInt(args[0]);
        try (
        ServerSocket serverSocket = new ServerSocket(portNumber);
        Socket clientSocket = serverSocket.accept();

        PrintWriter out = new 
        PrintWriter(clientSocket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(new 
        InputStreamReader(clientSocket.getInputStream())); ){

        System.out.println("Client connected on port " + portNumber 
        +". Servicing requests.");       
        out.write("CONNECTION ESTABLISHED");
        out.flush();
        String inputLine = "";
          while(true){
          System.out.println("Working");           
          inputLine = in.readLine();
          if(inputLine == ""){
              System.out.println("No Input");

          }else{
              System.out.println(inputLine);
          }
      }
} catch (IOException e) {
    System.out.println("Exception caught when trying to listen on 
    port "
        + portNumber + " or listening for a connection");
    }
}
}

C++ 客户端:

int main() {

    string ipAddress = "127.0.0.1";         
    int port = 54000;                       
    // Initialize WinSock
    WSAData data;
    WORD ver = MAKEWORD(2, 2);
    int wsResult = WSAStartup(ver, &data);
    if (wsResult != 0)
    {
        cerr << "Can't start Winsock, Err #" << wsResult << endl;
        return 0;
    }
    // Create socket
    SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == INVALID_SOCKET)
    {
        cerr << "Can't create socket, Err #" << WSAGetLastError() << endl;
        WSACleanup();
        return 0;
    }
    // Fill in a hint structure
    sockaddr_in hint;
    hint.sin_family = AF_INET;
    hint.sin_port = htons(port);
    inet_pton(AF_INET, ipAddress.c_str(), &hint.sin_addr);
    // Connect to server
    int connResult = connect(sock, (sockaddr*)&hint, sizeof(hint));
        if (connResult == SOCKET_ERROR)
        {
            cerr << "Can't connect to server, Err #" << WSAGetLastError() << endl;
            closesocket(sock);
            WSACleanup();
            return 0;
        }
    // Do-while loop to send and receive data
    char buf[4096];
    string userInput;
    do {
        // Prompt the user for some text
        cout << "> ";
        cin >> userInput;

        if (userInput.size() > 0)       // Make sure the user has typed in something
        {
            // Send the text
            int sendResult = send(sock, userInput.c_str(), userInput.size(), 0);
            if (sendResult != SOCKET_ERROR)
            {
                // Wait for response
                ZeroMemory(buf, 4096);
                int bytesReceived = recv(sock, buf, 4096, 0);
                if (bytesReceived > 0)
                {
                    // Echo response to console
                    cout << "SERVER> " << string(buf, 0, bytesReceived) << endl;
                }
            }
        }
    } while (userInput.size() > 0);

    closesocket(sock);
    WSACleanup();
    return 0;
}

标签: javac++sockets

解决方案


推荐阅读