关于java socket编程的问题

来源:百度知道 编辑:UC知道 时间:2024/05/12 09:32:39
关于java socket编程的问题: socket.getOutputStream().write(b);在什么情况下学个数据会被发送出去?

建议你去看看C socket

socket = new Socket(host, port);//建立链接
socket.setSoTimeout(timeout);//设置超时
dos = new DataOutputStream(socket.getOutputStream());
// int lengths = xmlmsg.length+16;
String xmllen = formatString("" + xmlmsg.length, 6);
dos.write(xmllen.getBytes());// 写报文头
dos.write(tradecode.getBytes());// 写报文头
dos.write(compcode.getBytes());// 写报文头
dos.write(xmlmsg);// 写报文(已经在发送)
socket.shutdownOutput();//告诉服务端关闭链接

这是我给某保险公司写的一段socket通讯的代码.

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

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

当程序运行到这条语句的时候啊,socket.getOutputStream().write(b);
不太明白你的意思。。。