Socket 参数笔记

//服务端
@RunWith(JUnit4.class) public class ServerSocketTest { @Test public void testServer() throws IOException{ ServerSocket serverSocket = new ServerSocket(8000); while(true){ //一旦连接,返回的socket包含客户端信息的socket Socket socket = serverSocket.accept(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); bw.write("host:"+socket.getInetAddress()+":"+socket.getPort()+"建立链接"); bw.flush(); bw.close(); } } }
/**
 * 
 * @author lzw
 * 客户端
 */
@RunWith(JUnit4.class)
public class SocketClient {
    @Test
    public void testClient() throws UnknownHostException, IOException{
        String serverMsg = null;
        //表示连接到服务器的 地址以及端口
        SocketAddress address = new InetSocketAddress("19.95.103.112",8000);
        Socket socket = new Socket();
        //connectionTime 使用最小时间建立连接,latency 表示最小延迟 bandwidth 表示最高宽带
        //三个参数根据任意整数来决定优先级,越大整数,优先级越高
        socket.setPerformancePreferences(2, 1, 3);
        //设置服务类型,用来描述服务的质量 0x02 低成本 0x04 高可靠性 0x08 最高吞吐量 0x10 最小延迟,还可以组合使用
//        socket.setTrafficClass(0x02);
        //标识是否紧急数据,false接收方不作处理,直接丢弃,true,接收方正常处理,除非有更高及的协议设置,否则效果不大,接收方不会判断是否紧急数据
//        socket.setOOBInline(true);
        //为ture时会监控连接是否活动,两个小时内没有交互,再等待12分钟,如果还是没有交互,那么会关联socket,false表示永远存在,哪怕服务器已经挂了
//        socket.setKeepAlive(true);
        //设置输入数据缓冲区大小,设置大了减少交互次数,对于网络游戏对数据即时性要求高的,应该设置更小的值
//        socket.setReceiveBufferSize(0);
        //设置写出缓冲区大小,同理setReceiveBufferSize
//        socket.setSendBufferSize(0);
        //必须在读取输入流之前设置,表示等待输入流数据超时时间。默认是0,无限等待
//        socket.setSoTimeout(1000);
        //发送方socket被调用close之后,是否延迟关闭,继续发送数据。等待时间超时才关闭。
//        socket.setSoLinger(true, 30);
        //当接收方socket被关闭的时候不会马上释放端口,而是接收完数据以后才释放,为了不让正在发送的数据,被下一个绑定到刚释放的端口上的SOCKET获取到,此方法必须在绑定端口之前设定,否则无效
//        socket.setReuseAddress(true);
        //是否使用Negale算法,false为使用,true为不是用。
//        socket.setTcpNoDelay(true);
        //连接等待1分钟,如果为0,那么将永远不超时
        socket.connect(address,60000);//连接
        System.out.println("localPort"+socket.getLocalPort());
        System.out.println("port:"+socket);
        InputStream inputStream = socket.getInputStream();
        //读取服务端返回的数据
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
        if((serverMsg = br.readLine())!=null){
            System.out.println("服务器:"+serverMsg);
        }
        br.close();
    }
}
原文地址:https://www.cnblogs.com/sweetchildomine/p/6444262.html