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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Socket通信

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Socket通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

一、?什么是Socket?

插述:

二、Socket通信模型

1.服務端

2.客戶端

三、代碼實現

服務端

客戶端

四、總結

?


一、?什么是Socket?

Socket(套接字),用來描述IP地址和端口,是通信鏈的句柄,是支持TCP/IP協議的網絡通信的基本操作單元,是對網絡通信過程中端點的抽象表示。
通過 socket 這種約定,一臺計算機可以接收其他計算機的數據,也可以向其他計算機發送數據。Socket()函數返回一個整型的Socket描述符,隨后的連接建立、數據傳輸等操作都是通過該Socket實現的。

插述:

TCP(Transmission Control Protocol)傳輸控制協議,是一種面向連接的、可靠的、基于字節流的通信協議。數據在傳輸前要建立連接,傳輸完畢后還要斷開連接。客戶端在收發數據前要使用 connect() 函數和服務器建立連接。建立連接的目的是保證IP地址、端口、物理鏈路等正確無誤,為數據的傳輸開辟通道。

二、Socket通信模型

以下內容來源于菜鳥7.6.2 基于TCP協議的Socket通信(1) | 菜鳥教程 (runoob.com)

?

Socket通信實現步驟解析

Step 1:創建ServerSocket和Socket

Step 2:打開連接到的Socket的輸入/輸出流

Step 3:按照協議對Socket進行讀/寫操作

Step 4:關閉輸入輸出流,以及Socket

三、Socket編寫

1.服務端

先創建ServerSocket對象,用來綁定監聽的端口;

再調用accept()方法來監聽客戶端的請求;

連接建立后,通過輸入流讀取客戶端發送的請求信息,通過輸出流向客戶端發送響應信息;

最后記得關閉相關資源。

2.客戶端

先創建Socket對象,要指明需要鏈接的服務器的地址和端號,即兩個參數;

鏈接建立后,通過輸出流向服務器發送請求信,通過輸出流獲取服務器響應的信息;

最后關閉相關資源

三、代碼實現

帶界面的聊天程序:

package Java_網絡編程.帶界面的聊天程序;import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.text.SimpleDateFormat; import java.util.Date;/*** @Date: 2021/10/29 - 10 - 29 - 11:35* @Description:*/ public class ChatFrame extends JFrame implements ActionListener {JTextField tf;//文本輸入框JTextArea ta;//接收所有聊天記錄JScrollPane sp;//滾動面板JButton send;JPanel p;//面板最下面的int port;//定義端口變量String s="";String myID;Date date;ServerSocket server;//服務器的對象Socket mysocket;//用來進行socket連接的對象BufferedReader is;//用來接收輸入PrintWriter os;//往外發送輸出String line;public ChatFrame(String ID,String remoteID,String IP,int port,boolean isServer){super(ID);myID=ID;this.port=port;ta=new JTextArea();ta.setEditable(false);//文本區域不可編輯sp=new JScrollPane(ta);this.setSize(330,400);this.setResizable(false);//不能改變窗口大小try {//設置界面風格,這是系統的顯示風格UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}catch (Exception e){System.out.println("UI error");}this.getContentPane().add(sp,"Center");//將滾動面板放在整個區域中央p=new JPanel();this.getContentPane().add(p,"South");send=new JButton("發送");tf=new JTextField(20);//文本輸入區域寬度20個字符tf.requestFocus();//要求光標放在文本輸入框上面p.add(tf);p.add(send);this.setDefaultCloseOperation(EXIT_ON_CLOSE);//設置可以退出this.setVisible(true);//可以顯示send.addActionListener(this);//注冊監聽器,當前對象處理tf.addActionListener(this);//誰當服務器,誰當客戶端if(isServer){try {//服務端server=null;try {server=new ServerSocket(port);}catch (Exception e){System.out.println("can not listen to:"+e);}mysocket=null;try{mysocket=server.accept();}catch (Exception e){System.out.println("Error:"+e);}is=new BufferedReader(new InputStreamReader(mysocket.getInputStream()));os=new PrintWriter(mysocket.getOutputStream());}catch (Exception e){System.out.println("Error:in server client socket"+e);}}else {try{//客戶端mysocket=new Socket(IP,port);os=new PrintWriter(mysocket.getOutputStream());is=new BufferedReader(new InputStreamReader(mysocket.getInputStream()));}catch (Exception e){System.out.println("Error:in client socket"+e);}}while (true){//一直循環try {line=is.readLine();//獲得輸入date=new Date();//顯示日期的格式: 年月日時分秒SimpleDateFormat formatter=new SimpleDateFormat("yyy-MM-dd HH:mm:ss");String currentTime=formatter.format(date);//獲取并轉化為字符穿s+=currentTime+""+remoteID+"說:\n"+line+"\n";ta.setText(s);//顯示文本區域上}catch (Exception e){System.out.println("Error:in receuve remote information"+e);}}}public void actionPerformed(ActionEvent e){//事件處理,捕捉信息date=new Date();//獲得信息SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-ss HH:mm:ss");String currentTime=formatter.format(date);//當前時間轉換格式s+=currentTime+""+myID+"說:\n"+tf.getText()+"\n";ta.setText(s);//顯示文本os.println(tf.getText());//剛文本框輸入信息打印os.flush();//輸出去,相當于從本地發送給另外聊天方tf.setText("");//把發送完的消息清理tf.requestFocus();//文本框獲得焦點} }

服務端

package Java_網絡編程.帶界面的聊天程序;/*** @Date: 2021/11/6 - 11 - 06 - 16:34* @Description:*/ public class ChatServerFrame {public static void main(String[] args) {ChatFrame cserver=new ChatFrame("cat","dog","127.0.0.1",2009,true);} }

客戶端

package Java_網絡編程.帶界面的聊天程序;/*** @Date: 2021/11/6 - 11 - 06 - 16:36* @Description:*/ public class ChatClientFrame {public static void main(String[] args) {ChatFrame cclient=new ChatFrame("Dog","Cat","127.0.0.1",2009,false);} }

四、總結

? //創建Socket 客戶端對象 Socket s = new Socket("127.0.0.1",6666); //創建ServerSocket?服務器端對象。。 ServerSocket ss = new ServerSocket(6666); //監聽服務器連接 s = ss.accept();?

?

?

總結

以上是生活随笔為你收集整理的Socket通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。