使用Java和C+的套接字通信+;在linux上 我实现了一个应用程序,在这里我需要在Java中使用Server套接字和C++ java中的客户机套接字,它们互相通信超过127.0.0.1 IP和4444端口。在我们的测试服务器(Linux)应用程序中工作正常,但在生产服务器中,套接字既不接受任何内容,客户端也不发送任何数据
你知道我怎样才能克服同样的问题吗 我应该检查安全、防火墙还是其他什么 < > <强>客户端Socket C++(DEMO) ==================================使用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();
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,即使它在您的代码中失败。您在代码返回语句中是对的,这是我的错误。谢谢你。但同样的代码也在我们的测试服务器中运行。是否需要在生产服务器中配置任何内容。