Java Socket笔记-利用tcp socket搭建CS模型
生活随笔
收集整理的這篇文章主要介紹了
Java Socket笔记-利用tcp socket搭建CS模型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
?
基本概念
代碼與實例
?
基本概念
這里采用的是TCP模型,只說明一點,在Java中有
import java.net.Socket;這個包中TCP的用法個人覺得和QTcpSocket差不多(個人覺得QTcpSocket好用點,可能是自己習慣問題)
這里用控制臺輸入,輸出可以采用這樣的方式!
首先構造一個輸入流:
InputStream in = System.in; BufferedReader input = new BufferedReader(new InputStreamReader(in));得到socket的輸入流
InputStream inputStream = client.getInputStream(); BufferedReader socketBufferedReader = new BufferedReader(new InputStreamReader(inputStream));然后從鍵盤輸入就可以直接發送了!
String str = input.readLine(); socketPrintStream.println(str);這樣的話,就要從鍵盤輸入,然后再發送了!
?
代碼與實例
程序運行截圖如下
服務器端:
客戶端:
源碼如下:
Client.java
import java.io.*; import java.net.Inet4Address; import java.net.InetSocketAddress; import java.net.Socket;public class Client {public static void main(String[] args) throws IOException{Socket socket = new Socket();socket.setSoTimeout(3000);//連接本地, 端口 2000, 超時時間3000mssocket.connect(new InetSocketAddress(Inet4Address.getLocalHost(), 2000), 3000);System.out.println("已發起服務器連接,并進入后續流程!");System.out.println("客戶端信息:" + socket.getLocalAddress() + " p:" + socket.getLocalPort());System.out.println("服務器信息:" + socket.getInetAddress() + " p:" + socket.getPort());try{todo(socket);}catch (Exception e){System.out.println("異常關閉");}//釋放資源socket.close();System.out.println("客戶端已退出!");}private static void todo(Socket client) throws IOException{//得到socket輸出流,并轉換為打印流OutputStream outputStream = client.getOutputStream();PrintStream socketPrintStream = new PrintStream(outputStream);//構建鍵盤輸入流InputStream inputStream = client.getInputStream();InputStream in = System.in;BufferedReader input = new BufferedReader(new InputStreamReader(in));BufferedReader socketBufferedReader = new BufferedReader(new InputStreamReader(inputStream));boolean flag = true;do{//鍵盤讀取一行String str = input.readLine();//發送到服務器socketPrintStream.println(str);//從服務器讀取一行String echo = socketBufferedReader.readLine();if("bye".equalsIgnoreCase(echo)){flag = false;}else{System.out.println(echo);}}while (flag);//資源釋放socketPrintStream.close();socketBufferedReader.close();} }Server.java
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket;public class Server {public static void main(String[] args) throws IOException{ServerSocket server = new ServerSocket(2000);System.out.println("服務器準備就緒!");System.out.println("服務器信息:" + server.getInetAddress() + " P:" + server.getLocalPort());//等待服務器連接server.accept();for(;;){//得到客戶端Socket client = server.accept();//客戶端構建異步線程ClientHandler clientHandler = new ClientHandler(client);//啟動線程clientHandler.start();}}private static class ClientHandler extends Thread{private Socket socket;private boolean flag = true;ClientHandler(Socket socket){this.socket = socket;}@Overridepublic void run() {super.run();System.out.println("新客戶端連接:" + socket.getInetAddress() + " P:" + socket.getPort());try{//得到打印流,用于數據輸出;服務器會送數據使用PrintStream socketOutput = new PrintStream(socket.getOutputStream());//得到輸入流,用于接收數據BufferedReader socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));do{//客戶端拿到一條數據String str = socketInput.readLine();if("bye".equalsIgnoreCase(str)){flag = false;//回送socketOutput.println("bye");}else{//打印到屏幕,并回送數據長度System.out.println(str);socketOutput.println("回送:" + str.length());}}while (flag);socketInput.close();socketOutput.close();}catch (Exception e){System.out.println("連接異常斷開!");}finally {//關閉連接try{socket.close();} catch (IOException e) {e.printStackTrace();}}System.out.println("客戶端已退出:" + socket.getInetAddress() + " P:" + socket.getPort());}} }?
總結
以上是生活随笔為你收集整理的Java Socket笔记-利用tcp socket搭建CS模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot中通过Accept
- 下一篇: Linux笔记-压缩包安装jdk1.7(