nearbyserversocket驱动_ServerSocket类的常用方法

1.accept:侦听并接受此套接字的连接;此方法在连接传入之前一直阻塞。

2.setSoTimeout(timeout)方法的作用时设置超时时间,通过指定超时timeout值启用/禁用超时功能,以ms为单位。

必须在进入阻塞前调用这个方法,才能生效,一旦超时,程序会触发SocketTimeoutException异常;默认值是0即永远等待。

Server.java

packagecom.company.s7;importjava.io.IOException;importjava.net.ServerSocket;public classServer {public static voidmain(String[] args) {try{

ServerSocket serverSocket=new ServerSocket(8000);

System.out.println(serverSocket.getSoTimeout());

serverSocket.setSoTimeout(4000);

System.out.println(serverSocket.getSoTimeout());

System.out.println();

System.out.println("begin "+System.currentTimeMillis());

serverSocket.accept();

System.out.println(" end "+System.currentTimeMillis());

}catch(IOException e){

e.printStackTrace();

}

}

}

Client.java

packagecom.company.s7;importjava.io.IOException;importjava.net.Socket;public classClient {public static voidmain(String[] args) {try{

System.out.println("client begin "+System.currentTimeMillis());

Socket socket=new Socket("localhost",8000);

System.out.println("client end "+System.currentTimeMillis());

}catch(IOException e){

e.printStackTrace();

System.out.println("catch "+System.currentTimeMillis());

}

}

}

backlog参数含义:

允许接受客户端连接请求的个数。

如果队列已满,则拒接该连接。

blacklog参数如果小于等于0,则使用默认值50;

Server.java

packagecom.company.s71;importjavax.sound.midi.Soundbank;importjava.io.IOException;importjava.net.ServerSocket;importjava.net.Socket;public classServer {public static void main(String[] args) throwsIOException, InterruptedException {

ServerSocket serverSocket=new ServerSocket(8088,3);//sleep(5000)的作用是不让ServerSocket调用accept()方法,//而是由客户端Socket先发奇10个连接请求//然后在执行accept方法时只能接收3个连接

Thread.sleep(5000);

System.out.println("accept1 begin");

Socket socket1=serverSocket.accept();

System.out.println("accept1 end");

System.out.println("accept2 begin");

Socket socket2=serverSocket.accept();

System.out.println("accept2 end");

System.out.println("accept3 begin");

Socket socket3=serverSocket.accept();

System.out.println("accept3 end");

System.out.println("accept4 begin");

Socket socket4=serverSocket.accept();

System.out.println("accept4 end");

System.out.println("accept5 begin");

Socket socket5=serverSocket.accept();

System.out.println("accept5 end");

socket1.close();

socket2.close();

socket3.close();

socket4.close();

socket5.close();

serverSocket.close();

}

}

Client.java

packagecom.company.s71;importjava.io.IOException;importjava.net.Socket;public classClient {public static void main(String[] args) throwsIOException {

Socket socket1=new Socket("localhost",8088);

Socket socket2=new Socket("localhost",8088);

Socket socket3=new Socket("localhost",8088);

Socket socket4=new Socket("localhost",8088);//Socket socket5=new Socket("localhost",8088);

}

}

先启动server.java,然后快速的启动client.java;

但是让我很奇怪的是服务端启动五秒之后,再启动客户端,反而能正确的执行;

如果由知道的人,请留言区告知,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值