java中缓冲流的差异与C++中的Socket工作 我尝试用C++中的套接字工作。我唯一使用套接字的工作是在Java中创建了一个IRC bot,具体来说,我使用的代码如下所示- Socket socket = new Socket(host, port); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())); BufferedReader reader = new BufferedReater( new InputStreamWriter(socket.getInputStream()));

java中缓冲流的差异与C++中的Socket工作 我尝试用C++中的套接字工作。我唯一使用套接字的工作是在Java中创建了一个IRC bot,具体来说,我使用的代码如下所示- Socket socket = new Socket(host, port); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())); BufferedReader reader = new BufferedReater( new InputStreamWriter(socket.getInputStream()));,java,c++,sockets,Java,C++,Sockets,然后,为了让我的机器人阅读,我将获得一个新线程并启动一个while循环- String line; while((line = reader.readLine()) != null) ... 并写— writer.write(text); writer.flush(); 现在我尝试在C++中做这些事情,当然事情的水平较低,我不太明白我在做什么。我找了一些关于使用winsock.h的教程,但都没用。我的一个朋友推荐了socket库sdl_net 我的问题是C++中的代码与java中的IRC B

然后,为了让我的机器人阅读,我将获得一个新线程并启动一个while循环-

String line;
while((line = reader.readLine()) != null) ...
并写—

writer.write(text);
writer.flush();
现在我尝试在C++中做这些事情,当然事情的水平较低,我不太明白我在做什么。我找了一些关于使用winsock.h的教程,但都没用。我的一个朋友推荐了socket库sdl_net


我的问题是C++中的代码与java中的IRC BOT代码相比,看起来有什么不同?此外,java中缓冲流和C++中的低级socket工作有什么区别?

< p>主要缓冲是提供函数来提取/存储块中的数据,例如读取完整的行并提高性能。 缓冲不同于套接字或任何其他类似的API。例如,底层输入设备socket不需要知道缓冲的上层。同时,缓冲并不区分底层输入是来自键盘、套接字还是任何其他设备。 例如,在Java使用BufferedReader类的情况下,底层输入类必须提供一些接口,这些接口可以用来读/写字符或单词块中的数据

所以BufferedWriter在这里所做的是存储您的数据,无论是以逐字符或逐字的方式写入的,并且只将其端刷新到输入设备,在这里,当显式调用flush或将其传递到“\n”或其对象被破坏或其缓冲区已满时,即maxlen是1024个字符

类似地,对于BufferedReader,如果您从套接字读取单个字符,它会在内部尝试读取1024个字符并返回单个字符。对于直到1024个字符的下一次读取,它保存了以前耗时的套接字调用,并从其内部读取缓冲区快速为您提供服务,直到找到工作为止


<>你可以在C++中实现相同的缓冲类,它可以轻松地为你提供套接字系统调用,提供完全相同的设施。为了缓冲,可以使用StruSt/StrnStultSTD类来读写字符串,您将理解使用它们的方式。

< P>回答您的主要问题,本教程向您大致显示C++的外观:

基本上,您需要使用套接字并将调用连接到,而不是新的套接字


< > C++流与原始套接字相似。GETOutux:IpDestSt流中没有缓冲。BufferedOutput | InputStream将写入/读取的字节存储在缓冲区中,而不是每次调用写入/读取时都写入底层流。调用刷新缓冲数据,通过写。

我建议使用库来实现高级C++网络代码。请理解说明。谢谢