当前位置: 技术问答>java相关
我的历史遗留问题。关于JAVA的SOCKET
来源: 互联网 发布时间:2014-12-22
本文导语: 我的部分代码: import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InterruptedIOException; import java.net.Socket; private static Socket dataSocket; private static DataInputStream socketDataIn...
我的部分代码:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.net.Socket;
private static Socket dataSocket;
private static DataInputStream socketDataIn;
private static DataOutputStream socketDataOut;
dataSocket = new Socket("172.16.18.1",1888);
dataSocket.setSoTimeout(5000);
dataSocket.setReceiveBufferSize(8192); //这个好象没起作用
socketDataIn = new DataInputStream(dataSocket.getInputStream());
socketDataOut= new DataOutputStream(dataSocket.getOutputStream());
socketDataOut.write(outDataBuff,0,2049);//大于2048的部分收不到
...
int pLength = socketDataIn.read(inDataBuff);
-------------------------------------------------------------------------
我的问题就是当发送超过2048个字节时,SOCKET另外一端收不全,必须再read一次。而我认为这个机制应该是由TCP层提供的,其他的工具C(UNIX)和DELHPI(WINDOWS)均无此问题。难道是JAVA的?
欢迎大家来讨论!
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.net.Socket;
private static Socket dataSocket;
private static DataInputStream socketDataIn;
private static DataOutputStream socketDataOut;
dataSocket = new Socket("172.16.18.1",1888);
dataSocket.setSoTimeout(5000);
dataSocket.setReceiveBufferSize(8192); //这个好象没起作用
socketDataIn = new DataInputStream(dataSocket.getInputStream());
socketDataOut= new DataOutputStream(dataSocket.getOutputStream());
socketDataOut.write(outDataBuff,0,2049);//大于2048的部分收不到
...
int pLength = socketDataIn.read(inDataBuff);
-------------------------------------------------------------------------
我的问题就是当发送超过2048个字节时,SOCKET另外一端收不全,必须再read一次。而我认为这个机制应该是由TCP层提供的,其他的工具C(UNIX)和DELHPI(WINDOWS)均无此问题。难道是JAVA的?
欢迎大家来讨论!
|
DATAOUTPUTSTREM 之类的是发送UNICODE,所以。。。。
|
关注关注,我也想知道怎么回事,提一提
我也帮你问一问
我也帮你问一问
|
socketDataOut.flush();
底层发送都存在一个最小尺度问题,如512字节满了才自动发送,而你的代码刚好不够,所以不会引发自动发送
底层发送都存在一个最小尺度问题,如512字节满了才自动发送,而你的代码刚好不够,所以不会引发自动发送
|
to airwing
我还是觉得与底层有关,因为setReceiveBuffer只是告诉JAVA系统设定一种缓冲机制
但数据总是要发送到网络上的。在物理层,存在一个最小发送长度,如通过ATM传送时好象是512个字节,你可以看看有关书籍,自然明白底层的运作
我还是觉得与底层有关,因为setReceiveBuffer只是告诉JAVA系统设定一种缓冲机制
但数据总是要发送到网络上的。在物理层,存在一个最小发送长度,如通过ATM传送时好象是512个字节,你可以看看有关书籍,自然明白底层的运作
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。