//服務端
@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();
}
}