2014-01-28 201 views
0

我是新的C++和套接字编程。我设法在unix机器上使用C++创建服务器,并将该服务器连接到在不同Windows计算机上运行的java客户端。我也设法成功地从客户端发送消息到服务器。我还没有管理的是将消息从服​​务器发送到客户端。我想这是我对C++新手,但我没有在互联网上找到一些非常有用的东西。我只发现C++客户端到服务器通信代码,而不是服务器到客户端。有人可以提供一些指导吗?将消息从C++服务器发送到java客户端

日Thnx提前为你的时间和你的帮助......

C++服务器代码

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=htons(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); 

      } 

    }while (1) ; 
    return 0; 

Java客户端代码

public class SOK_1_CLIENT { 




    public void run() throws Exception 
    { 
     String adrress="172.16.151.237"; //localhost -- samemachine 
     Socket SOCK =new Socket (adrress,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"); 
    } 


} 
+0

小心java的命名规则,因为这是有点混乱,看代码那么多常量。 – SirDarius

回答

1

在C座是双向的共产主义化的文件描述符。你可以使用send(2)给他们写信。检查man 2 send

char * buffer; 
size_t length, sent; 

while (length && (sent = send(mysock, buffer, length, 0)) > 0) { 
     length -= send; 
} 
if (sent < 0) 
    perror("send"); 

请注意,不像Java的BufferedWriter用C send将不能保证发送整个缓冲区一气呵成。因此,while循环。如果你需要缓冲套接字IO,那么你可以使用fdopen来创建一个stdio流,但是如果你希望能够传递标志和拦截套接字错误,那么不推荐这样做。

0

使用send()与最后一个参数(标志)如果你使用的是Windows,那么你可能还需要初始化和清理的Winsock设置为0

- 检查​​。

1

好的我看到你已经设法接收C++服务器中的消息并从java客户端发送。请参阅java中的“从套接字接收”和C++中的“从套接字发送”。在上面的代码中使用它们,并记住服务器何时发送,在java客户端应该期望从服务器获得数据时。这将解决你的问题。

如果你想使服务器 - 客户端,如聊天应用程序,你有两种可能性:

  • 使用 “选择”
    • 使用 “线程”

谷歌根据您的要求和使用的语言突出显示关键字。

看到this在C++插槽和this对Java插座

+0

thnx很详细的信息...这真的很有帮助..但我已经解决了我的问题已经得益于以前的答案。我不想要聊天类型的应用程序。直到现在我正在尝试...我的工作真正需要的只是从server2client发送消息...... Thnx又一次! –

相关问题