当前位置: 首页 > 知识库问答 >
问题:

将C++unix服务器/套接字连接到java windows客户端/套接字

越伟泽
2023-03-14

首先我要感谢你花时间...

我在macbook中用C++创建了一个服务器套接字,在运行windows XP的不同机器中用Java创建了一个客户机/套接字。我已将端口指定为5000,但无法指定正确的主机,因此无法进行连接。当我在windows xp中使用WinSock2创建一个C++服务器/套接字时,当我使用本地主机时,连接是完美的...有什么想法吗???

提前Thnx

int main(int argc,const char**argv){

/* SOCKET VARIABLES */
int sock;
struct sockaddr_in server;
int mysock;
char buff[1024];
int rval;


/*CREATE SOCKET*/
sock =socket(AF_INET, SOCK_STREAM, 0);
if (sock<0) 
{
    perror("*FAILED TO CREATE SOCKET*");
    exit(1);
}

server.sin_family=AF_INET;
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=5000;

/*CALL BIND*/
if (bind(sock, (struct sockaddr *)&server, sizeof(server)))
{
    perror("BIND FAILED");
    exit(1);
}


/*LISTEN*/
listen(sock, 5);


/*ACCEPT*/
do{

    mysock= accept(sock, (struct sockaddr *) 0, 0);

    if (mysock==-1) 
    {

        perror ("ACCEPT FAILED");
    }
    else
    {
        memset(buff, 0, sizeof(buff));

        if ((rval=recv(mysock, buff, sizeof(buff), 0)) <0) {
            perror("READING STREAM MESSAGE ERROR");
        }
        else if(rval==0)
            printf("Ending connection");
        else
            printf("MSG: %s\n", buff);

        printf("GOT THE MESSAGE (rval = %d)\n", rval);

    }

    return 0;
}while (1) ;

Java代码

导入java.io;导入java.net;

公共类SOK_1_CLIENT{

public void run() throws Exception
{
    Socket SOCK =new Socket ("localhost",5000);
    PrintStream PS =new PrintStream(SOCK.getOutputStream());
    PS.println("HELLO TO SERVER FROM CLIENT");

    InputStreamReader IR =new InputStreamReader(SOCK.getInputStream());
    BufferedReader BR = new BufferedReader(IR);

    String MESSAGE =BR.readLine();
    System.out.println(MESSAGE + "java");
}

}

共有1个答案

储嘉悦
2023-03-14

在java客户端中,使用运行服务器的系统的IP地址,而不是“localhost”。Localhost将引用运行客户端代码的机器的本地环回地址127.0.0.1,但您的服务器运行在不同的机器上,因此无法进行连接:

public void run() throws Exception
{
    String address = "address_of_machine_running_server";
    Socket SOCK =new Socket (address,5000);
    PrintStream PS =new PrintStream(SOCK.getOutputStream());
    PS.println("HELLO TO SERVER FROM CLIENT");

    InputStreamReader IR =new InputStreamReader(SOCK.getInputStream());
    BufferedReader BR = new BufferedReader(IR);

    String MESSAGE =BR.readLine();
    System.out.println(MESSAGE + "java");
}

还要注意,您需要相应地设置防火墙以允许连接。

  • 允许两台计算机中的传入和传出连接
  • 检查服务器的ip地址是否正确
  • 尝试用主机(服务器)的ip地址ping主机,以确保其启动并工作
  • 如果以上所有参数都返回正值,则您将具有成功的完全连接。
 类似资料:
  • 真的需要你帮忙。 我的项目是通过电缆连接两台PC机,并使用tcp套接字将客户端文本框形式的字符串发送到服务器。问题是ATI只能发送一个字符串,然后连接就会关闭。 注意:某个端口上的连接将在表单加载中建立并成功。

  • Java: 在C#中-它停止在“receiver=listener.accept();”在java(android)中-它停止于“sender_socket=new Socket(serverAddr,SERVERPORT);”这应该是java套接字函数的问题--需要另一个函数连接到C#-server。

  • 当我尝试使用套接字将物理设备连接到服务器时,我遇到了一个问题。在服务器端,它似乎不接受任何连接,而在客户端,套接字超时。你知道为什么会这样吗? 我在下面提供我的代码 服务器代码: 客户端: 11-16 23:32:11.016:W/系统。错误(24213):java.net。ConnectException:无法连接到/192.168.1.116(端口9090):连接失败:ETIMEDOUT(连接

  • 我试图用java实现一个客户端服务器,在这里我读取客户端中的输入并在服务器中执行UperCase,然后返回客户端并打印UperCase。我使用ObjectOutputStream和ObjectInputStream进行读写,但是当我在客户机中键入一个msg时,程序会显示以下错误: Digite uma msg casa java.io.eofexception位于java.io.datainput

  • 可能还值得注意的是,我使用了的修改版本,专门为unix域填充。

  • 如何使用套接字将Swift客户端连接到Java服务器?如何在客户端和服务器之间发送不同的数据类型?