SOCKETjava
TCP端口號,用來識別服務器上特定的應用程序 :0~1023 是通用端口 HTTP:80 FTP:20 smtp:25 telnet:23 pop3:110 time :37 1024~65536 可以使用緩存
1.使用BufferedReader從Socket上讀取數據服務器
//創建對服務器的Socket鏈接
Socket socket = new Socket("127.0.0.1","5000");//創建對服務器的Socket鏈接//127.0.0.1 表示本機地址 應寫服務器的地址併發
//創建鏈接到Socket上底層輸入串流的InputStreamReader 字節--->字符數據
InputStreamReader stream = new InputStreamReader(socket.getInputStream());
底層與高層串流件的橋樑 從Socket取得輸入串流socket
//創建BufferedReader來讀取 字符數據--->緩存數據
BufferedReader reader = new BufferedReader(stream);//BufferedReader連接到InputStreamReader
String message = reader.readLine();線程
reader.close();//關閉全部的串流server
2.使用PrintWriter寫數據到Socket上對象
//創建對服務器的Socket鏈接
Socket socket = new Socket("127.0.0.1","5000");//創建對服務器的Socket鏈接//127.0.0.1 表示本機地址 應寫服務器的地址get
//創建鏈接到Socket的 PrintWriter
PrintWriter writer = new PrintWriter(socket.getOutputStream());//PrinterWriter 是字符數據和字節間的轉換橋樑,能夠連接String和Socket兩端虛擬機
//寫入數據
writer.println("message to send");
writer.print("another message");
編寫服務器應用程序須要:一對Socket
1:等待用戶請求的ServerSocket
2:與用戶通訊用得Socket
(1)服務器應用程序對特定端口建立出ServerSocket:
ServerSocket serverSocket = new ServerSocket(4242);//這會讓服務器開始監聽來自4242端口的客戶請求
(2)客戶端對服務器應用城區創建Socket連接
Socket s = new Socket("172.0.0.1","4242");
(3)服務器建立出與客戶端通訊的新Socket
Socket s = serverSocket.accept();// acccpt()方法會在等待用戶的 Socket鏈接,當用戶發來Socket鏈接請求,
//該方法會返回新的Socket(與ServerSocket端口不相同),所以 ServerSocket可空出來等待其餘的用戶。
啓動新的線程
(1)創建Runable對象(線程的任務)
Runnable threadJob = new MyRunnable();
public class MyRunnable implements Runnable{
public void run(){ go();};
}
(2)創建Thread對象(執行工人),並賦值Runnable(任務)
Thread myThread = new Thread(threadJob);//新建狀態
(3)啓動Thread
myThread.start();//可執行狀態----->執行中(只能靠JAVA虛擬機的線程調度機制來實現)
線程的併發性問題:使用synchronized關鍵詞來修飾方法使它每次只能被單一的線程存取synchronized是做用在java對象上的。