2014-04-08 79 views
1

对不起,我英文很差。在C++和Java之间通过TCP Socket发送消息

我成功地开发了一个等待Java Socket连接的C++服务器套接字。我首先启动我的C++服务器,写上“等待连接...”,然后启动我的Java Socket,我可以在我的C++服务器上看到“客户端连接!”所以它的作品。但是,我想从C++服务器向Java客户端发送消息。我从服务器上收不到任何东西。这里是我的C++服务器和Java客户端代码:

C++服务器:

#include "stdafx.h" 

#ifdef _WIN32 
#include <Winsock2.h> 
#define SOCKET_ERRNO WSAGetLastError() 
#define ERRNO  GetLastError() 
#else 
#define SOCKET_ERRNO errno 
#define ERRNO  errno 
#define closesocket close 
#endif 
#include <io.h> 
#include <fcntl.h> 
#include <stdio.h> 
#include <conio.h> 
#include <errno.h> 

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    SOCKET hSocket, hAccept; 
    struct sockaddr_in addr; 
    int len = sizeof(addr);  
    int nPort = 2009; 

    // Initialize winsock 
    WSADATA stack_info ; 
    WSAStartup(MAKEWORD(2,0), &stack_info) ; 

    //Create socket 
    hSocket = socket(PF_INET, SOCK_STREAM, 0); 
    if(hSocket == INVALID_SOCKET) 
    { 
     printf("socket() error %d\n", SOCKET_ERRNO); 
     getchar(); 
     exit(1); 
    } 

    //Listen to the socket 
    addr.sin_family = AF_INET ; 
    addr.sin_addr.s_addr = htonl (INADDR_ANY); 
    addr.sin_port = htons ((unsigned short)nPort); 
    if (bind(hSocket, (struct sockaddr *)&addr, sizeof(addr)) == SOCKET_ERROR) 
    { 
     printf("bind() error\n"); 
     getchar(); 
     exit(1); 
    } 

    if (listen(hSocket, 100) == SOCKET_ERROR) 
    { 
     printf("listen() error\n"); 
     getchar(); 
     exit(1); 
    } 

    printf("Waiting for a connection..."); 

    //Waiting for a client to connect 
    hAccept = accept(hSocket, NULL, NULL); 

    printf("\nClient connected!"); 

    //Sending a message 
    char Buffer[1024]; 
    sprintf_s(Buffer, "hello"); 
    send(hAccept, Buffer, 8, 0); 
    printf("Sent!"); 

    getchar(); 

    return 0; 
} 

Java客户端:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.InetAddress; 
import java.net.Socket; 
import java.net.UnknownHostException; 


public class Client { 

    public static void main(String[] args) { 

     Socket socket; 
     BufferedReader in; 
     PrintWriter out; 

     try { 
      socket = new Socket(InetAddress.getLocalHost(),2009); 

      in = new BufferedReader (new InputStreamReader (socket.getInputStream())); 
      String message_distant = in.readLine(); 
      System.out.println(message_distant); 

      socket.close(); 

     }catch (UnknownHostException e) { 

      e.printStackTrace(); 
     }catch (IOException e) { 

      e.printStackTrace(); 
     } 
    } 

} 

有谁知道为什么我没有看到消息我从C++ Server发送到Java客户端?

感谢

+1

也许是因为你没有发送一行? –

+0

换句话说,缺少一个换行符 – deviantfan

+0

非常感谢!我添加了\ n,它的工作原理。 – user2108742

回答

3

你的Java客户端读取使用in.readLine插座上的数据();它基本上读取数据,直到找到行分隔符或回车符。 我对C++并不是很熟悉,但似乎你的C++服务器只发送“hello”而没有行分隔符。这使得Java客户端永远等待。 要解决此问题,您可以从C++服务器发送“hello \ n”或“hello \ r \ n”。