日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java Socket笔记-利用tcp socket搭建CS模型

發(fā)布時間:2025/3/15 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java Socket笔记-利用tcp socket搭建CS模型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

?

基本概念

代碼與實(shí)例


?

基本概念

這里采用的是TCP模型,只說明一點(diǎn),在Java中有

import java.net.Socket;

這個包中TCP的用法個人覺得和QTcpSocket差不多(個人覺得QTcpSocket好用點(diǎn),可能是自己習(xí)慣問題)

這里用控制臺輸入,輸出可以采用這樣的方式!

首先構(gòu)造一個輸入流:

InputStream in = System.in; BufferedReader input = new BufferedReader(new InputStreamReader(in));

得到socket的輸入流

InputStream inputStream = client.getInputStream(); BufferedReader socketBufferedReader = new BufferedReader(new InputStreamReader(inputStream));

然后從鍵盤輸入就可以直接發(fā)送了!

String str = input.readLine(); socketPrintStream.println(str);

這樣的話,就要從鍵盤輸入,然后再發(fā)送了!

?

代碼與實(shí)例

程序運(yùn)行截圖如下

服務(wù)器端:

客戶端:

源碼如下:

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("已發(fā)起服務(wù)器連接,并進(jìn)入后續(xù)流程!");System.out.println("客戶端信息:" + socket.getLocalAddress() + " p:" + socket.getLocalPort());System.out.println("服務(wù)器信息:" + socket.getInetAddress() + " p:" + socket.getPort());try{todo(socket);}catch (Exception e){System.out.println("異常關(guān)閉");}//釋放資源socket.close();System.out.println("客戶端已退出!");}private static void todo(Socket client) throws IOException{//得到socket輸出流,并轉(zhuǎn)換為打印流OutputStream outputStream = client.getOutputStream();PrintStream socketPrintStream = new PrintStream(outputStream);//構(gòu)建鍵盤輸入流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();//發(fā)送到服務(wù)器socketPrintStream.println(str);//從服務(wù)器讀取一行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("服務(wù)器準(zhǔn)備就緒!");System.out.println("服務(wù)器信息:" + server.getInetAddress() + " P:" + server.getLocalPort());//等待服務(wù)器連接server.accept();for(;;){//得到客戶端Socket client = server.accept();//客戶端構(gòu)建異步線程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{//得到打印流,用于數(shù)據(jù)輸出;服務(wù)器會送數(shù)據(jù)使用PrintStream socketOutput = new PrintStream(socket.getOutputStream());//得到輸入流,用于接收數(shù)據(jù)BufferedReader socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));do{//客戶端拿到一條數(shù)據(jù)String str = socketInput.readLine();if("bye".equalsIgnoreCase(str)){flag = false;//回送socketOutput.println("bye");}else{//打印到屏幕,并回送數(shù)據(jù)長度System.out.println(str);socketOutput.println("回送:" + str.length());}}while (flag);socketInput.close();socketOutput.close();}catch (Exception e){System.out.println("連接異常斷開!");}finally {//關(guān)閉連接try{socket.close();} catch (IOException e) {e.printStackTrace();}}System.out.println("客戶端已退出:" + socket.getInetAddress() + " P:" + socket.getPort());}} }

?

總結(jié)

以上是生活随笔為你收集整理的Java Socket笔记-利用tcp socket搭建CS模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。