如何解决java中Socketv on is not boundd yet

private static void Main(string[] args)
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(check);
private static bool check(object sender, X509Certificate certificate, X509Chain chain,
SslPolicyErrors sslpolicyerrors)
return true;
错误的信息如下:
System.Web.Services.Protocols.SoapException was unhandled&&Message="System.Web.Services.Protocols.SoapException: Server was unable to process request. ---& System.NullReferenceException: Object reference not set to an instance of an object.\n & at AAWebServLIB.AuthExtension.ProcessMessage(SoapMessage message)\n & at System.Web.Services.Protocols.SoapMessage.RunExtensions(SoapExtension[] extensions, Boolean throwOnException)\n & at System.Web.Services.Protocols.SoapServerProtocol.CreateServerInstance()\n & at System.Web.Services.Protocols.WebServiceHandler.Invoke()\n & at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()\n & --- End of inner exception stack trace ---"&&Source="System.Web.Services"&&Actor=""&&Lang=""&&Node=""&&Role=""&&StackTrace:&& & & at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)&& & & at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)&& & & at ClassLibrary1.WebReference.mwWebSrvStAc.GetBoard() in C:\SchoolConnects\920\Trunk\sims\Maplewood\YCDSB\ConsoleApplication1\ConsoleApplication1\ClassLibrary1\Web References\WebReference\Reference.cs:line 992&& & & at ConsoleApplication1.Program.Main(String[] args) in C:\SchoolConnects\920\Trunk\sims\Maplewood\YCDSB\ConsoleApplication1\ConsoleApplication1\ConsoleApplication1\Program.cs:line 16&& & & at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)&& & & at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)&& & & at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()&& & & at System.Threading.ThreadHelper.ThreadStart_Context(Object state)&& & & at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)&& & & at System.Threading.ThreadHelper.ThreadStart()&&InnerException:&
园豆:1786
提问于: 14:05
问题补充:
1) Stylus Studio 2011 XML企业版
调试这个 SOAP,也出错。基本可以肯定是Server那边有问题。但也要想办法证明错不在我们。
2) 经过努力,发现SOAPExtension 在浏览器中是不会执行的。而App 访问时会执行SoapExtension。谢谢各位了。下个星期2就知道结果。到时候我会结贴,感谢大家。
3) 已经确认是客户的问题,呵呵,他们的技术人员很没有面子。谢谢各位。
分享您的问题
好像是认证的时候发生了空类型的错误。是不是某个参数未初始化。
收获园豆:155
|园豆:3275
园豆:1786
园豆:3275
园豆:1786
园豆:3275
园豆:1786
园豆:3275
园豆:1786
其他回答(8)
System.NullReferenceException: Object reference not set to an instance of an object
错误信息中出现很常见的"未将对象引用设置到对象的实例",没有"应该不存在"的问题吧...楼主调试跟踪下数据看看...
收获园豆:25
园豆:3565
园豆:1786
/// &summary&
/// 基于https访问方式调用webservice
/// &/summary&
private void btnHttps_Click(object sender, EventArgs e)
DataSet ds = new DataSet();
ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
localhost.IwebService objSessionManager = new localhost.IwebService();
//安全访问的webservice地址
objSessionManager.Url = System.Configuration.ConfigurationSettings.AppSettings["WebService.MocService"];
objSessionManager.Credentials = System.Net.CredentialCache.DefaultC
// WSE 3.0 method
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
//客户端安装证书名称
string findValue = "MyKey";
X509Certificate2Collection certsCollection = store.Certificates.Find(X509FindType.FindByIssuerName, findValue, false);
X509Certificate2
if (certsCollection.Count & 0)
//导入客户端证书
cert = certsCollection[0];
objSessionManager.ClientCertificates.Clear();
objSessionManager.ClientCertificates.Add(cert);
//下面是调用webservice服务getAll
ds = ArrayToDataSet.ObjectArrayToDataSet(objSessionManager.getAll("nq", "nqdev"));
//绑定控件
GV1.DataSource = ds.Tables[0];
收获园豆:5
园豆:1786
我是不是可以告诉你该方法 DistrictDataSet GetDistrict()返回的soap消息格式同自动生成的客户端代理类的格式不一致?
对方是不是使用了诸如java,php等非.net技术发布的web service?
1,找到 SoapUI 的免费版工具,通过该工具测试 DistrictDataSet GetDistrict()方法;
2,使用 Fiddler 抓取http请求,检查请求是否已经返回正确数据,只是你的客户端无法正常反序列化.
收获园豆:5
园豆:44856
园豆:1786
园豆:1786
园豆:44856
有没有可能,他提供的wsdl不是最新的,所以通过浏览器可以,但用代理类就有问题
收获园豆:5
园豆:1254
园豆:1786
我觉得是不是存在跨域的问题?你通过后台转发来调用接口试一试....
收获园豆:5
园豆:1786
现在我也遇到这个问题,请问是如何解决?
园豆:1786
尝试了两天终于解决了。已知道的是服务器域认证,iis中application pools中Process Model中设置Identity为localsystem,测试通过
&&&您需要以后才能回答,未注册用户请先。Socket 通信中由 read 返回值造成的的死锁问题
在第一章中,作者给出了一个 TCP Socket 通信的例子——反馈服务器,即服务器端直接把从客户端接收到的数据原原本本地反馈回去。
示例客户端代码如下:
import java.net.S
import java.net.SocketE
import java.io.IOE
import java.io.InputS
import java.io.OutputS
public class TCPEchoClient {
public static void main(String[] args) throws IOException {
if ((args.length & 2) || (args.length & 3))
// Test for correct # of args
throw new IllegalArgumentException("Parameter(s): &Server& &Word& [&Port&]");
String server = args[0];
// Server name or IP address
// Convert argument String to bytes using the default character encoding
byte[] data = args[1].getBytes();
int servPort = (args.length == 3) ? Integer.parseInt(args[2]) : 7;
// Create socket that is connected to server on specified port
Socket socket = new Socket(server, servPort);
System.out.println("Connected to server...sending echo string");
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
out.write(data);
// Send the encoded string to the server
// Receive the same string back from the server
int totalBytesRcvd = 0;
// Total bytes received so far
int bytesR
// Bytes received in last read
while (totalBytesRcvd & data.length) {
if ((bytesRcvd = in.read(data, totalBytesRcvd,data.length - totalBytesRcvd)) == -1)
throw new SocketException("Connection closed prematurely");
totalBytesRcvd += bytesR
// data array is full
System.out.println("Received: " + new String(data));
socket.close();
// Close the socket and its streams
示例服务器端代码如下:
import java.net.*;
// for Socket, ServerSocket, and InetAddress
import java.io.*;
// for IOException and Input/OutputStream
public class TCPEchoServer {
private static final int BUFSIZE = 32;
// Size of receive buffer
public static void main(String[] args) throws IOException {
if (args.length != 1)
// Test for correct # of args
throw new IllegalArgumentException("Parameter(s): &Port&");
int servPort = Integer.parseInt(args[0]);
// Create a server socket to accept client connection requests
ServerSocket servSock = new ServerSocket(servPort);
int recvMsgS
// Size of received message
byte[] receiveBuf = new byte[BUFSIZE];
// Receive buffer
while (true) { // Run forever, accepting and servicing connections
Socket clntSock = servSock.accept();
// Get client connection
SocketAddress clientAddress = clntSock.getRemoteSocketAddress();
System.out.println("Handling client at " + clientAddress);
InputStream in = clntSock.getInputStream();
OutputStream out = clntSock.getOutputStream();
// Receive until client closes connection, indicated by -1 return
while ((recvMsgSize = in.read(receiveBuf)) != -1) {
out.write(receiveBuf, 0, recvMsgSize);
clntSock.close();
// Close the socket.
We are done with this client!
/* NOT REACHED */
运行结果如下:
问题的引出
客户端与服务器端在接收和发送数据时,read()和write()方法不一定要对应,比如,其中一方可以一次发送多个字节的数据,而另一方可以一个字节一个字节地接收,也可以一个字节一个字节地方送,而多个字节多个字节地接收。因为TCP协议会将数据分成多个块进行发送,而后在另一端会从多个块进行接收,再组合在一起,它并不仅能确定read()和write()方法中所发送信息的界限。
read()方法会在没有数据可读时发生阻塞,直到有新的数据可读。
注意客户端中下面部分代码。
while (totalBytesRcvd & data.length) {
if ((bytesRcvd = in.read(data, totalBytesRcvd,data.length - totalBytesRcvd)) == -1)
throw new SocketException("Connection closed prematurely");
totalBytesRcvd += bytesR
// data array is full
客户端从 Socket 套接字中读取数据,直到收到的数据的字节长度和原来发送的数据的字节长度相同为止,这里的前提是已经知道了要从服务器端接收的数据的大小,如果现在我们不知道要反馈回来的数据的大小,那么我们只能用 read 方法不断读取,直到 read()返回 -1,说明接收到了所有的数据。我这里采用一个字节一个字节读取的方式,代码改为如下:
while((bytesRcvd = in.read())!= -1){
data[totalBytesRcvd] = (byte)bytesR
totalBytesRcvd++;
这时问题就来了,输出结果如下:
问题的分析
客户端没有数据打印出来,初步推断应该是 read()方法始终没有返回 -1,导致程序一直无法往下运行,我在客客户端执行窗口中按下 CTRL+C,强制结束运行,在服务器端抛出如下异常:
Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at TCPEchoServer.main(TCPEchoServer.java:32)
异常显示,问题出现在服务端的 32 行,没有资源可读,现在很有可能便是由于 read()方法始终没有返回 -1 所致,为了验证,我在客户端读取字节的代码中加入了一行打印读取的单个字符的代码,如下:
while((bytesRcvd = in.read())!= -1){
data[totalBytesRcvd] = (byte)bytesR
System.out.println((char)data[totalBytesRcvd]);
totalBytesRcvd++;
此时运行结果如下:
很明显,客户端程序在打印出最有一个字节后不再往下执行,没有执行其后面的 System.out.println(&Received: & + new String(data));这行代码,这是因为 read()方法已经将数据读完,没有数据可读,但又没有返回 -1,因此在此处产生了阻塞。这便造成了 TCP Socket 通信的死锁问题。
问题的解决
问题就出现在 read()方法上,这里的重点是 read()方法何时返回-1,在一般的文件读取中,这代表流的结束,亦即读取到了文件的末尾,但是在 Socket 套接字中,这样的概念很模糊,因为套接字中数据的末尾并没有所谓的结束标记,无法通过其自身表示传输的数据已经结束,那么究竟什么时候 read()会返回 -1 呢?答案是:当 TCP 通信连接的一方关闭了套接字时。
再次分析改过后的代码,客户端用到了read()返回 -1 这个条件,而服务端也用到了,只有二者有一方关闭了 Socket,另一方的 read()方法才会返回 -1,而在客户端打印输出前,二者都没有关闭 Socket,因此,二者的 read()方法都不会返回 -1,程序便阻塞在此处,都不往下执行,这便造成了死锁。
反过来,再看书上的给出的代码,在客户端代码的 while 循环中,我们的条件是totalBytesRcvd & data.length,而不是(bytesRcvd = in.read())!= -1,这样,客户端在收到与其发送相同的字节数之后便会退出 while 循环,再往下执行,便是关闭套接字,此时服务端的 read()方法检测到客户端的关闭,便会返回 -1,从而继续往下执行,也将套接字关闭。因此,不会产生死锁。
那么,如果在客户端不知道反馈回来的数据的情况下,该如何避免死锁呢?Java 的 Socket 类提供了 shutdownOutput()和 shutdownInput()另个方法,用来分别只关闭 Socket 的输出流和输入流,而不影响其对应的输入流和输出流,那么我们便可以在客户端发送完数据后,调用 shutdownOutput()方法将套接字的输出流关闭,这样,服务端的 read()方法便会返回 -1,继续往下执行,最后关闭服务端的套接字,而后客户端的 read()()方法也会返回 -1,继续往下执行,直到关闭套接字。
客户端改变后的代码部分如下:
out.write(data);
// Send the encoded string to the server
socket.shutdownOutput();
这样,便得到了预期的运行结果,如下:
由于 read()方法只有在另一端关闭套接字的输出流时,才会返回 -1,而有时候由于我们不知道所要接收数据的大小,因此不得不用 read()方法返回 -1 这一判断条件,那么此时,合理的程序设计应该是先关闭网络输出流(亦即套接字的输出流),再关闭套接字。一、构造Socket Socket的构造方法有以下几种重载形式:
(1)Socket()
(2)Socket(InetAddress address, int port)throws UnknownHostException,IOException
(3)Socket(InetAddress address, int port, InetAddress localAddr, int localPort)throws IOException
(4)Socket(String host, int port) throws UnknownHostException,IOException
(5)Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException
各构造方法的用法如下:
1. 设定等待建立连接的超时时间:
Socket socket=new Socket();
SocketAddress remoteAddr=new InetSocketAddress("localhost",8000);
//等待建立连接的超时时间为1分钟
socket.connect(remoteAddr, 60000); 2. 设定服务器的地址:
Socket(InetAddress address, int port)
Socket(String host, int port)
InetAddress类表示IP地址,其用法如下:
//返回本地主机的IP地址
InetAddress addr1=InetAddress.getLocalHost();
//返回代表"222.34.5.7"的IP地址
InetAddress addr2=InetAddress.getByName("222.34.5.7");
//返回域名为"www.javathinker.org"的IP地址
InetAddress addr3=InetAddress.getByName("www.javathinker.org"); 3. 设定客户端的地址:
在一个Socket对象中,既包含远程服务器的IP地址和端口信息,也包含本地客户端的IP地址和端口信息。默认情况下,客户端的IP地址来自于客户程序所在的主机,客户端的端口则由操作系统随机分配。Socket类还有两个构造方法允许显式的设置客户端的IP地址和端口:
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)throws IOException
Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException 4. 客户连接服务器时可能抛出的异常:
当Socket的构造方法请求连接服务器时,可能会抛出以下异常:
l UnknownHostException:如果无法识别主机的名字或IP地址,就会抛出这种异常。
l ConnectException:如果没有服务器进程监听指定的端口,或者服务器进程拒绝连接,就会抛出这种异常。
l SocketTimeoutException:如果等待连接超时,就会抛出这种异常。
l BindException:如果无法把Socket对象与指定的本地IP地址或端口绑定,就会抛出这种异常。
二、获取Socket的信息 以下方法用于获取Socket的有关信息:
l getInetAddress():获得远程服务器的IP地址。
l getPort():获得远程服务器的端口。
l getLocalAddress():获得客户本地的IP地址。
l getLocalPort():获得客户本地的端口。
l getInputStream():获得输入流。如果Socket还没有连接,或者已经关闭,或者已经通过shutdownInput()方法关闭输入流,那么此方法会抛出IOException。
l getOutputStream():获得输出流。如果Socket还没有连接,或者已经关闭,或者已经通过shutdownOutput()方法关闭输出流,那么此方法会抛出IOException。
三、关闭Socket 1. 当客户与服务器的通信结束,应该及时关闭Socket,以释放Socket占用的包括端口在内的各种资源。Socket的close()方法负责关闭Socket。推荐代码如下:
Socket socket=null;
socket=new Socket("www.javathinker.org",80);
//执行接收和发送数据的操作
}catch(IOException e){
e.printStackTrace();
if(socket!=null)socket.close();
}catch(IOException e){e.printStackTrace();}
} 2. Socket类提供了三个状态测试方法:
l isClosed()
l isConnected()
l isBound()
3. 如果要判断一个Socket对象当前是否处于连接状态,可采用以下方式:
boolean isConnected=socket.isConnected() && !socket.isClosed(); 四、半关闭Socket 1. 有的时候,可能仅仅希望关闭输出流或输入流之一。此时可以采用Socket类提供的半关闭方法:
l shutdownInput():关闭输入流。
l shutdownOutput(): 关闭输出流。
2. 先后调用Socket的shutdownInput()和shutdownOutput()方法,仅仅关闭了输入流和输出流,并不等价于调用Socket的close()方法。在通信结束后,仍然要调用Socket的close()方法,因为只有该方法才会释放Socket占用的资源,比如占用的本地端口等。
3. Socket类还提供了两个状态测试方法,用来判断输入流和输出流是否关闭:
l public boolean isInputShutdown()
l public boolean isOutputShutdown()
五、设置Socket的选项 Socket有以下几个选项:
n TCP_NODELAY:表示立即发送数据。
n SO_RESUSEADDR:表示是否允许重用Socket所绑定的本地地址。
n SO_TIMEOUT:表示接收数据时的等待超时时间。
n SO_LINGER:表示当执行Socket的close()方法时,是否立即关闭底层的Socket。
n SO_SNFBUF:表示发送数据的缓冲区的大小。
n SO_RCVBUF:表示接收数据的缓冲区的大小。
n SO_KEEPALIVE:表示对于长时间处于空闲状态的Socket,是否要自动把它关闭。
n OOBINLINE:表示是否支持发送一个字节的TCP紧急数据。
1. TCP_NODELAY选项
1) 设置该选项:public void setTcpNoDelay(boolean on) throws SocketException
2) 读取该选项:public boolean getTcpNoDelay() throws SocketException
3) TCP_NODEALY的默认值为false,表示采用Negale算法。如果调用setTcpNoDelay(true)方法,就会关闭Socket的缓冲,确保数据及时发送:
if(!socket.getTcpNoDelay()) socket.setTcpNoDelay(true);
4) 如果Socket的底层实现不支持TCP_NODELAY选项,那么getTcpNoDelay()和setTcpNoDelay()方法会抛出SocketException。
2. SO_RESUSEADDR选项
1) 设置该选项:public void setResuseAddress(boolean on) throws SocketException
2) 读取该选项:public boolean getResuseAddress() throws SocketException
3) 为了确保一个进程关闭了Socket后,即使它还没释放端口,同一个主机上的其他进程还可以立刻重用该端口,可以调用Socket的setResuseAddress(true)方法:
if(!socket.getResuseAddress()) socket.setResuseAddress(true);
4) 值得注意的是socket.setResuseAddress(true)方法必须在Socket还没有绑定到一个本地端口之前调用,否则执行socket.setResuseAddress(true)方法无效。因此必须按照以下方式创建Socket对象,然后再连接远程服务器:
Socket socket = new Socket(); //此时Socket对象未绑定到本地端口,并且未连接远程服务器
socket.setResuseAddress(true);
SocketAddress remoteAddr = new InetSocketAddress("remotehost",8000);
socket.connect(remoteAddr); //连接远程服务器,并且绑定匿名的本地端口
Socket socket = new Socket(); //此时Socket对象未绑定到本地端口,并且未连接远程服务器
socket.setResuseAddress(true);
SocketAddress localAddr = new InetSocketAddress("localhost",9000);
SocketAddress remoteAddr = new InetSocketAddress("remotehost",8000);
socket.bind(localAddr); //与本地端口绑定
socket.connect(remoteAddr); //连接远程服务器,并且绑定匿名的本地端口 3. SO_TIMEOUT选项
1) 设置该选项:public void setSoTimeout(int milliseconds) throws SocketException
2) 读取该选项:public int getSoTimeOut() throws SocketException
3) 当通过Socket的输入流读数据时,如果还没有数据,就会等待。Socket类的SO_TIMEOUT选项用于设定接收数据的等待超时时间,单位为毫秒,它的默认值为0,表示会无限等待,永远不会超时。
4) Socket的setSoTimeout()方法必须在接收数据之前执行才有效。此外,当输入流的read()方法抛出SocketTimeoutException后,Socket仍然是连接的,可以尝试再次读取数据。
4. SO_LINGER选项
1) 设置该选项:public void setSoLinger(boolean on, int seconds) throws SocketException
2) 读取该选项:public int getSoLinger() throws SocketException
3) SO_LINGER选项用来控制Socket关闭时的行为。
l socket.setSoLinger(true,0):执行Socket的close()方法时,该方法也会立即返回,但底层的Socket也会立即关闭,所有未发送完的剩余数据被丢弃。
l socket.setSoLinger(true,3600):执行Socket的close()方法时,该方法不会立即返回,而进入阻塞状态,同时,底层的Socket会尝试发送剩余的数据。只有满足以下两个条件之一,close()方法才返回:
n 底层的Socket已经发送完所有的剩余数据。
n 尽管底层的Socket还没有发送完所有的剩余数据,但已经阻塞了3600秒。close()方法的阻塞时间超过3600秒,也会返回,剩余未发送的数据被丢弃。
以上两种情况内,当close()方法返回后,底层的Socket会被关闭,断开连接。
4) setSoLinger(boolean on ,int second)方法中的seconds参数以秒为单位,而不是以毫秒为单位。
5. SO_RCVBUF选项
1) 设置该选项:public void setReceiveBufferSize(int size) throws SocketException
2) 读取该选项:public int getReceiveBufferSize() throws SocketException
3) SO_RCVBUF表示Socket的用于输入数据的缓冲区的大小。
4) 如果底层Socket不支持SO_RCVBUF选项,那么setReceiveBufferSize()方法会抛出SocketException。
6. SO_SNDBUF选项
1) 设置该选项:public void setSendBufferSize(int size) throws SocketException
2) 读取该选项:public int getSendBufferSize() throws SocketException
3) SO_SNDBUF表示Socket的用于输出数据的缓冲区的大小。
4) 如果底层Socket不支持SO_SNDBUF选项,setSendBufferSize()方法会抛出SocketException。
7. SO_KEEPALIVE选项
1) 设置该选项:public void setKeepAlive(boolean on) throws SocketException
2) 读取该选项:public int getKeepAlive() throws SocketException
3) 当SO_KEEPALIVE选项为true,表示底层的TCP实现会监视该连接是否有效。
4) SO_KEEPALIVE选项的默认值为false,表示TCP不会监视连接是否有效,不活动的客户端可能会永久存在下去,而不会注意到服务器已经崩溃。
8. OOBINLINE选项
1) 设置该选项:public void setOOBInline(int size) throws SocketException
2) 读取该选项:public int getOOBInline () throws SocketException
3) 当OOBINLINE为true时,表示支持发送一个字节的TCP紧急数据。Socket类的sendUrgentDate(int data)方法用于发送一个字节的TCP紧急数据。
4) OOBINLINE的默认值为false,在这种情况下,当接收方收到紧急数据时不作任何处理,直接将其丢弃。如果用户希望发送紧急数据,应该把OOBINLINE设为true:socket.setOOBInline(true); 此时接收方会把接收到的紧急数据与普通数据放在同样的队列中。值得注意的是,除非使用一些更高层次的协议,否则接收方处理紧急数据的能力非常有限,当紧急数据到来时,接收方不会得到任何通知,因此接收方很难区分普通数据与紧急数据,只好按照同样的方式处理它们。
9. 服务类型选项
1) IP规定了四种服务类型,用来定性的描述服务的质量:
l 低成本:发送成本低。
l 高可靠性:保证把数据可靠的送达目的地。
l 最高吞吐量:一次可以接收或发送大批量的数据。
l 最小延迟:传输数据的速度快,把数据快速送达目的地。
2) 这四种服务类型还可以进行组合,例如,可以同时要求获得高可靠性和最小延迟。Socket类中提供了设置和读取服务类型的方法:
l 设置服务类型:public void setTrafficClass(int trafficClass) throws SocketException
l 读取服务类型:public int getTrafficClass() throws SocketException
3) Socket类用四个整数表示服务类型:
l 低成本:0x02 (二进制的倒数第二位为1)
l 高可靠性:0x04(二进制的倒数第三位为1)
l 最高吞吐量:0x08(二进制的倒数第四位为1)
l 最小延迟:0x10(二进制的倒数第五位为1)
10. 设定连接时间、延迟和带宽的相对重要性
public void setPerformancePreferences(int connectionTime,int latency,int bandwidth)
以上方法的三个参数表示网络传输数据的三项指标:
n 参数connectionTime:表示用最少时间建立连接。
n 参数latency:表示最小延迟。
n 参数bandwidth:表示最高带宽。
setPerformancePreferences()方法用来设定这三项指标之间的相对重要性。可以为这些参数赋予任意的整数,这些整数之间的相对大小就决定了相应参数的相对重要性。例如,如果参数connectionTime为2,参数latency为1,而参数bandwidth为3,就表示最高带宽最重要,其次是最少连接时间,最后是最小延迟。
阅读(...) 评论()

我要回帖

更多关于 java is not in path 的文章

 

随机推荐