0

我在考虑如何读取通过 Socket 发送的数据量。例如,如果我创建了一个聊天应用程序,然后想知道一条消息需要多少(以千字节或字节为单位),我将如何衡量这个?

我发送一条消息,例如“你好,世界!”。如何测量发送所需的带宽量?

我知道有一些程序可以监控通过网络发送和接收的数据量等等,但我想自己尝试做这件事来学习一些东西。

4

2 回答 2

2

将套接字的输出流包装在CountingOutputStream中:

CountingOutputStream cos = new CountingOutputStream(socket.getOutputStream());
cos.write(...);
System.out.println("wrote " + cos.getByteCount() + " bytes");
于 2012-12-14T21:01:46.480 回答
0

如果您发送没有标头(协议)的原始字符串对于您拥有的字符串

String hello = "Hello World";
hello.getBytes().length //size of the message

为了在发送文件时向用户显示进度,您可以这样做

Socket s = new Socket();
//connect to the client, etc...

//supose you have 5 MB File
FileInputStream f = new FileInputStream( myLocalFile );

//declare a variable
int bytesSent = 0;
int c;
while( (c = f.read()) != -1) {
   s.getOutputStream().write(c);
   bytesSent++; //One more byte sent!
   notifyGuiTotalBytesSent(bytesSent);
}

好吧,这只是一个非常简单的实现,不使用缓冲区来读取和发送数据,只是为了让你明白。方法 nitify.... 将在 GUI 线程(不是这个)中显示 bytesSent 值

于 2012-12-14T19:16:35.217 回答