使用Java和C+的套接字通信+;在linux上 我实现了一个应用程序,在这里我需要在Java中使用Server套接字和C++ java中的客户机套接字,它们互相通信超过127.0.0.1 IP和4444端口。在我们的测试服务器(Linux)应用程序中工作正常,但在生产服务器中,套接字既不接受任何内容,客户端也不发送任何数据

使用Java和C+的套接字通信+;在linux上 我实现了一个应用程序,在这里我需要在Java中使用Server套接字和C++ java中的客户机套接字,它们互相通信超过127.0.0.1 IP和4444端口。在我们的测试服务器(Linux)应用程序中工作正常,但在生产服务器中,套接字既不接受任何内容,客户端也不发送任何数据,java,c++,sockets,Java,C++,Sockets,你知道我怎样才能克服同样的问题吗 我应该检查安全、防火墙还是其他什么 < > 客户端Socket C++(DEMO) ================================== class tcp_client { private: int sock; std::string address; int port; struct sockaddr_in server; public: tcp_client(); bool conn();

你知道我怎样才能克服同样的问题吗

我应该检查安全、防火墙还是其他什么

< > <强>客户端Socket C++(DEMO) ==================================

class tcp_client
{
private:
    int sock;
    std::string address;
    int port;
    struct sockaddr_in server;

public:
    tcp_client();
    bool conn();
    bool send_data(string data);
   // string receive(int);
};

tcp_client::tcp_client()
{
    sock = -1;
    port = 4444;
    address = "127.0.0.1";
}

/**
    Connect to a host on a certain port number
*/
bool tcp_client::conn()
{
    //create socket if it is not already created
    if(sock == -1)
    {
        //Create socket
        sock = socket(AF_INET , SOCK_STREAM , 0);
        if (sock == -1)
        {
            perror("Could not create socket");
        }
     }
    server.sin_addr.s_addr = inet_addr( address.c_str() );
    server.sin_family = AF_INET;
    server.sin_port = htons( port );
    //Connect to remote server
    if (connect(sock , (struct sockaddr *)&server , sizeof(server)) < 0)
    {
        perror("connect failed.## Error");
        return 1;
    }     
    cout<<"Connected\n";
    return true;
}

/**
    Send data to the connected host
*/
bool tcp_client::send_data(string data)
{
    //Send some data
    if( send(sock , data.c_str() , strlen( data.c_str() ) , 0) < 0)
    {
        perror("Send failed : ");
        return false;
    }
    cout<<"Data send\n  "<<sock;

    return true;
}

int main(int argc , char *argv[])
{
    tcp_client c;

        c.conn();  
        c.send_data("Test Class C++ Client \n");   

    return 0;
}
public class ServerSocketTest {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {

            try {  
                StringBuffer inputLine = new StringBuffer();
                ServerSocket serverSocket = new ServerSocket(4444);

                while(true){

                    System.out.println("Waiting to receive ---->> ");
                    Socket clientSocket = serverSocket.accept();
                    System.out.println("After receive ---->> ");
                    DataInputStream dis=new DataInputStream(clientSocket.getInputStream());                     
                    String tmp; 
                    while ((tmp = dis.readLine()) != null) {
                        inputLine.append(tmp);
                        System.out.println(tmp);
                    }
                    //use inputLine.toString(); here it would have whole source
                    dis.close();            
                    clientSocket.close();  
              }

            }
            catch(Exception e)
            {
              // e.printStackTrace();
            }
    }

}

提前谢谢。

我只是想澄清一下。。在生产服务器上,两个应用程序都在同一台设备上运行?是否已检查服务器是否正在侦听端口?-您可以使用
netstat-tulpn
来检查这一点。您是否尝试使用netcat之类的工具连接到服务器例如,
netcat 127.0.0.1 4444
1。是的,两者都在同一个设备中。是的,服务器正在监听端口,您是否调试C++代码来检查是否连接失败。顺便说一句,conn返回true,即使它在您的代码中失败。您在代码返回语句中是对的,这是我的错误。谢谢你。但同样的代码也在我们的测试服务器中运行。是否需要在生产服务器中配置任何内容。