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客户端?
感谢
也许是因为你没有发送一行? –
换句话说,缺少一个换行符 – deviantfan
非常感谢!我添加了\ n,它的工作原理。 – user2108742