所謂socket通常也稱作"套接字",用于描述IP地址和端口,是一個通信鏈的句柄。應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求。Socket和ServerSocket類庫位于java.net包中。ServerSocket用于服務器端,Socket是建立網絡連接時使用的。在連接成功時,應用程序兩端都會產生一個Socket實例,操作這個實例,完成所需的會話。對于一個網絡連接來說,套接字是平等的,并沒有差別,不因為在服務器端或在客戶端而產生不同級別。不管是Socket還是ServerSocket它們的工作都是通過SocketImpl類及其子類完成的。
下面是我忍為比較重要的API:
1、. Accept方法用于產生"阻塞",直到接受到一個連接,并且返回一個客戶端的Socket對象實例。"阻塞"是一個術語,它使程序運行暫時"停留"在這個地方,直到一個會話產生,然后程序繼續;通常"阻塞"是由循環產生的。
2、. getInputStream方法獲得網絡連接輸入,同時返回一個InputStream對象實例,。
3、. getOutputStream方法連接的另一端將得到輸入,同時返回一個OutputStream對象實例。
注意:其中getInputStream和getOutputStream方法均會產生一個IOException,它必須被捕獲,因為它們返回的流對象,通常都會被另一個流對象使用。
寫代碼時一般先寫server端.
//Server
package Killva.NetWorkchaper1.o3;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class TestTCPServer {
public static void main(String args[])throws IOException{
ServerSocket ss =new ServerSocket(9999);
while(true){
System.out.println("--------服務端已近啟動------------");
Socket s =ss.accept();
DataOutputStream dos =new DataOutputStream(s.getOutputStream());
System.out.println("客戶端["+s.getInetAddress().getHostAddress()+
" :"+s.getPort()+
"]已近鏈接!");
dos.writeUTF("服務器端寫入客戶端的數據:客戶端("+
s.getInetAddress().getHostAddress()+
" :"+s.getPort()+
"]已經鏈接上服務器端["+
s.getLocalAddress().getHostName()+
":"+s.getLocalPort()+
"]!");
dos.flush();
dos.close();
s.close();
}
}
}
Client端
package Killva.NetWorkchaper1.o3;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
public class TestTCPCLient {
public static void main(String[] args) throws IOException{
System.out.println("-------------client端-----------");
for(long i=0;i<10;i++){
Socket s =new Socket("192.168.1.*",9999);//IP是用你所在的局域網來測試
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println(""+dis.readUTF());
dis.close();
s.close();
}
}
}
運行結果真確時服務器端和客戶端能連接
感謝閱讀?。。?!