首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将c++ unix服务器/套接字连接到java windows客户端/套接字

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

Stack Overflow用户
提问于 2014-01-24 14:28:29
回答 1查看 1.5K关注 0票数 4

一开始我要感谢你抽出时间..。

我在macbook中用c++创建了一个服务器套接字,在运行windows的不同机器上使用Java创建了一个客户机/套接字。我已将端口指定为5000,但无法指定正确的主机,因此无法进行连接。当我在windows中使用c++创建WinSock2服务器/套接字时,连接就像我使用localhost...any的想法一样完美。

先期

C++代码

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

代码语言:javascript
复制
/* 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 {

代码语言:javascript
复制
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");
}

}

EN

回答 1

Stack Overflow用户

发布于 2014-01-27 06:32:58

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

代码语言:javascript
复制
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地址敲击主机(服务器),以确保其启动和工作。
  • 如果以上所有返回正,您将有一个成功的连接。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21335152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档