Java Tcp協(xié)議socket編程學(xué)習(xí)
我學(xué)習(xí)到的主要步驟
第一步:以特定端口(如4800)新建socket對(duì)象第二步:以系統(tǒng)輸入設(shè)備構(gòu)造BufferedReader對(duì)象,該對(duì)象用于接收系統(tǒng)鍵盤輸入的字符第三步:以socket對(duì)象 得到輸出流來構(gòu)造PrintWriter第四步:以socket對(duì)象得到輸入流來構(gòu)造相應(yīng)的BufferedReader對(duì)象,該對(duì)象用于接收server端發(fā)送過來的信息
我理解到的關(guān)閉socket:先開的后關(guān)閉,socket最后關(guān)閉。
以下是客戶端的代碼實(shí)現(xiàn):
package com.fan.socket;
import java.io.*;import java.net.Socket;
public class SocketClient {public static void main(String[] args) throws IOException{
try{Socket socket=new Socket('127.0.0.1',4800);System.out.println('client start ...');//向本機(jī)的4800端口發(fā)出客戶請(qǐng)求BufferedReader br=new BufferedReader(new InputStreamReader(System.in));//由系統(tǒng)標(biāo)準(zhǔn)輸入設(shè)備構(gòu)造BufferedReader對(duì)象PrintWriter write=new PrintWriter(socket.getOutputStream());//由Socket對(duì)象得到輸出流,并構(gòu)造PrintWriter對(duì)象BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));//由Socket對(duì)象得到輸入流,并構(gòu)造相應(yīng)的BufferedReader對(duì)象String readline;readline=br.readLine(); //從系統(tǒng)標(biāo)準(zhǔn)輸入讀入一字符串while(!readline.equals('end')){//若從標(biāo)準(zhǔn)輸入讀入的字符串為 'end'則停止循環(huán)write.println(readline);//將從系統(tǒng)標(biāo)準(zhǔn)輸入讀入的字符串輸出到Server2write.flush();//刷新輸出流,使Server馬上收到該字符串System.out.println('Client:'+readline);//在系統(tǒng)標(biāo)準(zhǔn)輸出上打印讀入的字符串System.out.println('Server:'+in.readLine());//從Server讀入一字符串,并打印到標(biāo)準(zhǔn)輸出上readline=br.readLine(); //從系統(tǒng)標(biāo)準(zhǔn)輸入讀入一字符串} //繼續(xù)循環(huán)write.close(); //關(guān)閉Socket輸出流in.close(); //關(guān)閉Socket輸入流 socket.close(); //關(guān)閉Socket }catch(Exception e) {System.out.println('can not listen to:'+e);//出錯(cuò),打印出錯(cuò)信息}}
}
服務(wù)端代碼實(shí)現(xiàn):
package com.fan.socket;
import java.io.*;import java.net.ServerSocket;import java.net.Socket;
public class SocketService {public static void main(String[] args) throws IOException{SocketService socketService = new SocketService();socketService.oneServer();}public void oneServer(){try{ServerSocket server=null;try{server=new ServerSocket(4800);System.out.println('server start is ok...');//創(chuàng)建一個(gè)ServerSocket在端口4800監(jiān)聽客戶請(qǐng)求}catch(Exception e) {System.out.println('can not listen to:'+e);//出錯(cuò),打印出錯(cuò)信息}Socket socket=null;try{socket=server.accept();//使用accept()阻塞等待客戶請(qǐng)求,有客戶//請(qǐng)求到來則產(chǎn)生一個(gè)Socket對(duì)象,并繼續(xù)執(zhí)行}catch(Exception e) {System.out.println('Error.'+e);//出錯(cuò),打印出錯(cuò)信息}String line;BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));//由Socket對(duì)象得到輸入流,并構(gòu)造相應(yīng)的BufferedReader對(duì)象PrintWriter writer=new PrintWriter(socket.getOutputStream());//由Socket對(duì)象得到輸出流,并構(gòu)造PrintWriter對(duì)象BufferedReader br=new BufferedReader(new InputStreamReader(System.in));//由系統(tǒng)標(biāo)準(zhǔn)輸入設(shè)備構(gòu)造BufferedReader對(duì)象System.out.println('Client:'+in.readLine());//在標(biāo)準(zhǔn)輸出上打印從客戶端讀入的字符串line=br.readLine();//從標(biāo)準(zhǔn)輸入讀入一字符串while(!line.equals('end')){//如果該字符串為 'end',則停止循環(huán)writer.println(line);//向客戶端輸出該字符串writer.flush();//刷新輸出流,使Client馬上收到該字符串System.out.println('Server:'+line);//在系統(tǒng)標(biāo)準(zhǔn)輸出上打印讀入的字符串System.out.println('Client:'+in.readLine());//從Client讀入一字符串,并打印到標(biāo)準(zhǔn)輸出上line=br.readLine();//從系統(tǒng)標(biāo)準(zhǔn)輸入讀入一字符串} //繼續(xù)循環(huán)writer.close(); //關(guān)閉Socket輸出流in.close(); //關(guān)閉Socket輸入流socket.close(); //關(guān)閉Socketserver.close(); //關(guān)閉ServerSocket}catch(Exception e) {//出錯(cuò),打印出錯(cuò)信息System.out.println('Error.'+e);}}}
相關(guān)文章:
1. python excel和yaml文件的讀取封裝2. moment轉(zhuǎn)化時(shí)間戳出現(xiàn)Invalid Date的問題及解決3. python爬蟲實(shí)戰(zhàn)之制作屬于自己的一個(gè)IP代理模塊4. Android通用流行框架大全5. Android中的緩存6. Android從按下開機(jī)鍵到啟動(dòng)發(fā)生了什么7. 一個(gè)Android項(xiàng)目搞定所有主流架構(gòu)8. Android組件化和插件化開發(fā)9. Java CountDownLatch應(yīng)用場(chǎng)景代碼實(shí)例10. java——Byte類/包裝類的使用說明
