Sockets 如何使用Winsock2发送协议缓冲区对象? 我正在使用一个简单的套接字创建一个客户机服务器应用程序,在C++和java之间传输协议缓冲对象。我在Java端创建了它,作为客户端和接收方。我甚至把java发送到C++,但是我从C++到java的发送遇到了麻烦。不知道怎么写。首先我发送大小,然后读取原型对象 我使用VisualStudioC++ 2008。数据报和Bookmartlet是我的原型对象 这是我的C++发送器客户端< /P>
int-loopt=99Sockets 如何使用Winsock2发送协议缓冲区对象? 我正在使用一个简单的套接字创建一个客户机服务器应用程序,在C++和java之间传输协议缓冲对象。我在Java端创建了它,作为客户端和接收方。我甚至把java发送到C++,但是我从C++到java的发送遇到了麻烦。不知道怎么写。首先我发送大小,然后读取原型对象 我使用VisualStudioC++ 2008。数据报和Bookmartlet是我的原型对象 这是我的C++发送器客户端< /P>,sockets,visual-c++,protocol-buffers,winsock2,Sockets,Visual C++,Protocol Buffers,Winsock2,int-loopt=99 do { DataGram dataGram; dataGram.set_state("ACK"); time ( &rawtime ); dataGram.set_status(ctime(&rawtime)); Bookmarklet* bookmarklet = dataGram.mutable_bookmarklet(); bookmarklet->set_name("TEST");
do {
DataGram dataGram;
dataGram.set_state("ACK");
time ( &rawtime );
dataGram.set_status(ctime(&rawtime));
Bookmarklet* bookmarklet = dataGram.mutable_bookmarklet();
bookmarklet->set_name("TEST");
bookmarklet->set_utl("TEST");
dataGram.SerializeToArray(recvbuf,recvbuflen);
dataGram.ByteSize();
//Trouble SPOT
send(ConnectSocket,size,1,0);
send(ConnectSocket,recvbuf,recvbuflen,0);
} while (loopt > 0);
这就是我试图从Java复制的内容
OutputStream output = socket.getOutputStream();
try {
int testtimes = 99;
while (socket.isConnected() && testtimes > 0) {
Thread.sleep(1000); // do nothing for 1000 miliseconds (1
// second)
DataGram dataGram = null;
Bookmarklet bookmarklet = Bookmarklet.newBuilder()
.setName("TEST").setUtl("TEST").build();
if (testtimes % 2 == 0) {
dataGram = DataGram.newBuilder().setState("ACK")
.setBookmarklet(bookmarklet)
.setStatus(new Date().toGMTString()).build();
} else {
dataGram = DataGram.newBuilder().setState("ACK")
.setStatus(new Date().toGMTString()).build();
}
output.write(dataGram.getSerializedSize());
output.write(dataGram.toByteArray());
testtimes--;
}
} catch (Exception e) {
e.printStackTrace();
}
任何帮助都会很好。谢谢
Java客户端以供参考:
InputStream input = socket.getInputStream();
int count = input.read();
int counter = 0;
while (count > 0) {
byte[] buffer = new byte[count];
count = input.read(buffer);
DataGram dataGram = DataGram.parseFrom(buffer);
Bookmarklet bookmarklet = null;
if ((bookmarklet = dataGram.getBookmarklet()) != null) {
System.out.println(bookmarklet.toString());
}
System.out.println(dataGram.getState() + " "
+ dataGram.getStatus());
count = input.read();
System.out.println(++counter);
}
您似乎从未初始化“大小”。您应该有'size=dataGram.ByteSize;'或者类似的?您似乎从未初始化“大小”。您应该有'size=dataGram.ByteSize;'或者类似的?