关于java socket编程的问题

2024-12-30 02:17:15
推荐回答(6个)
回答1:

建议你去看看C socket

回答2:

程序执行了这句 socket.getOutputStream().write(b)时,b就被发送出去了。

当b = "test".getBytes();时会被正确执行。因为OutputStream的write方法参数是字节数组类型。如下:
public void write(byte[] b)
public void write(byte[] b, int off, int len)

回答3:

你再执行一下flush(),如:
OutputStream out = conn.openOutputStream();
b = "test".getBytes();
out.write(b);
out.flush();
这样就可以了

回答4:

应该是在客户端设置超时时间,从发出数据报开始计时,也可以使用线程的休眠解决,即发出数据报后让该线程休眠,具体代码实例可以参看国外一本叫《计算机网络》的书 ^_^ 忘记作者是谁了,曾经是我上课的教材。

回答5:

getOutputStream得到的OutputStream类是个抽象类,一般发送字节是用DataOutputStream,如果是字符串就用PrintStream。
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
在用out.write()来发送。

另,这个问题要说起来确实比较复杂,使用Stream方式其实是使用的TCP方式发送数据包,此时当执行write方法的时候实际上是写到了发送缓冲区,至于发送出去没有,很难说,比如缓冲区满了,或者其他问题可能会导致稍后才发送出去,并且每次发送多少字节也是不确定的,也就是说客户端也许只收到部分数据。使用flush()方法的用途就是确保缓冲区的数据完全发送出去。

回答6:

socket.getOutputStream().write(b);
我们所做的是在应用层上进行的操作。如果这个操作没有抛出异常,就可以认为是发送出去了。
如果你想知道具体在哪一刻发送出去的,在应用层是做不到的,真想知道的话,可以用一些抓包工具得到,这是在传输层才能做到的。