通过 TCP 套接字在 C++ 和 Java 之间发送消息
Sending a message via TCP Socket between C++ and Java
对不起,我的英语很差。
我成功地开发了一个等待Java套接字连接的C++服务器套接字。我首先启动我的C++服务器,写"等待连接...",然后启动我的Java套接字,我可以在我的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 %dn", 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() errorn");
getchar();
exit(1);
}
if ( listen( hSocket, 100) == SOCKET_ERROR )
{
printf("listen() errorn");
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;
}
爪哇客户端:
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();
}
}
}
有谁知道为什么我没有看到从服务器发送到 Java 客户端的消息C++?
谢谢
Java 客户端使用 in.readLine() 从套接字读取数据;它基本上读取数据,直到找到行分隔符或回车符。我对C++不太熟悉,但似乎您的C++服务器只发送"hello"而不使用行分隔符。这使得 Java 客户端永远等待。要解决此问题,您可以从C++服务器发送"hello"或"hello\r"。
相关文章:
- GCC 警告和 gcc 错误消息之间的区别
- 在 2 个并行运行的脚本(python 和 C++)之间传递消息
- 如何使用标准库网络 TS 在服务器和客户端之间发送消息C++
- 在两个进程之间传递消息
- 如何在两个类之间发送/接收消息
- 未定义的行为和格式错误之间的区别,不需要诊断消息
- msgpack:C++和Java之间的消息传递
- C++ - 在进程之间发送消息
- 是否有任何消息总是出现在WM_LBUTTONDOWN和WM_LBUTTNUP之间
- 增强ASIO和线程之间的消息传递
- 消息在网络上的两台机器之间传递
- 如何使用两个管道在子级/父级之间发送消息
- 在到应用程序之间的消息中重复WaitForSingleObject
- 在 MFC 对话框和自己的线程上的 OpenGL 控件之间传递消息
- ZeroMQ 在节点之间创建消息缓冲区
- 使用命令文件在线程之间传递消息
- 使用互斥对象与消息在线程之间共享信息
- 在C++actors框架中在类型化参与者之间转发消息的最佳实践
- 进程之间的Windows CE集中式消息队列
- HOWTO:使用Boost::asio在线程之间发布消息