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();
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM