TCP Java客户端向c++服务器发送数据
TCP Java client sending Data to a C++ Server
我得到了一个服务器与ClientHandle接受请求,如果有一些,我想从Java发送数据到它。(c++客户端没有任何问题)
我读了其他关于这个的帖子,但他们没有以任何方式帮助我。Post1、Post2 Post3
bool ClientHandle::getData(std::shared_ptr<std::string> ptr)
{
int n;
ptr->clear();
char size[4];
n = recv(m_sock, size, sizeof(size), 0);
//check if retval passed
if (!checkRetValRecv(n))
return false;
//calc how much data
auto msgLen = atoi(size);
LOG_INFO << "recv a message with size: " << msgLen;
//create buffer for the data
auto buffer = new char[msgLen];
//read buffer
n = recv(m_sock, buffer, msgLen, 0);
//check retval if it passes
if (!checkRetValRecv(n))
return false;
ptr->append(buffer, msgLen);
LOG_INFO << "Message: " << *ptr;
delete[] buffer;
return true;
}
bool ClientHandle::checkRetValRecv(const int& n)
{
if (n == SOCKET_ERROR)
{
size_t err = WSAGetLastError();
if (err == WSAECONNRESET)
{
LOG_ERROR << "Failed to recv! Disconnecting from client: " << "Connection reset by peer.";
}
else
{
LOG_ERROR << "Disconnecting from client. WSAError: " << err;
}
m_connected = false;
return false;
}
if (n == 0)
{
LOG_INFO << "Client disconnected.";
m_connected = false;
return false;
}
return true;
}
现在我想写一个Java客户端来发送数据,但我甚至不能发送传入数据的大小。
public class JClient{
String m_host;
int m_port;
Socket m_sock;
OutputStreamWriter m_out;
BufferedReader m_in;
public JClient(String host, int port)
{
m_host = host;
m_port = port;
}
private void connect() throws IOException
{
m_sock = new Socket(m_host, m_port);
m_out = new OutputStreamWriter(m_sock.getOutputStream());
m_in = new BufferedReader(new InputStreamReader(m_sock.getInputStream()));
}
private void close() throws IOException
{
m_sock.close();
}
public void send(String json) throws IOException {
this.connect();
m_out.write(json.length());
m_out.flush();
m_out.write(json);
m_out.flush();
//wait for result
m_in.read();
this.close();
}
}
如果我尝试这样发送数据:
JClient client = new JIMClient("localhost", 6060);
String toSend = "{"hello":"someJson"}";
try {
client.send(toSend);
} catch (IOException e) {
e.printStackTrace();
}
我没有收到任何有用的东西。recv a message with size: 0
, Client disconnected.
发送方法不工作。我已经尝试过其他流和使用不同的编码,我想这就是原因。所以问题是我如何解决这个问题与编码在这里?如果可能的话,我想让c++客户端保持原样,或者让它达到某种标准。
Java代码只发送一个字符的长度,但c++期望一个4字节的字符串。你可以试试
m_out.write(String.format("%4d%s",json.length(),json));
m_out.flush();
相关文章:
- 将相机数据从服务器实时流式传输到客户端
- 不将数据 socket.io c++(客户端)发送到 nodejs(服务器)socket.io
- Arduino UNO+SIM800L-向服务器发送数据
- 在 1 个服务器 n 客户端套接字 C++ MFC 应用程序中更新数据的客户端
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- Java 客户端C++服务器数据发送/接收问题
- QTcpSocket 在 RemoteHostClosedError 后重新连接到服务器时无法传输数据
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- 如何使用软化工具包从 OPC UA 服务器异步读取操作回调中的数据值响应中获取 NodeId 详细信息
- 如何在C++中使用带有SFML的http reqest从节点.js服务器获取数据?
- 在 MySQL 中运行 HTTP 服务器以从客户端接收数据
- 使用 Broadcast 发出的从节点服务器发送的数据不能被 C++ 套接字 IO 客户端读取
- 如何使用 asio 本地数据报构建回显服务器和客户端?
- 将数据包从C++服务器发送到NodeJs服务器时出现MessagePack解码错误
- 如何使用gRPC在客户端和服务器之间双向发送和接收流元数据
- 通过TCP将数据从C++客户端发送到JSON服务器
- 如何使客户端在将数据写入 C++ 管道之前检查服务器是否完成了从管道的读取操作
- C++中从客户端到服务器的数据传输问题
- Qt TCP服务器不从客户端读取数据
- 如何使用 C++ 中的 cpprestsdk 发布 json 数据并从本地服务器获取响应