亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

基于java TCP網絡通信的實例詳解

2019-11-26 16:04:57
字體:
來源:轉載
供稿:網友
JAVA中設計網絡編程模式的主要有TCP和UDP兩種,TCP是屬于即時通信,UDP是通過數據包來進行通信,UDP當中就會牽扯到數據的解析和傳送。在安全性能方面,TCP要略勝一籌,通信過程中不容易出現數據丟失的現象,有一方中斷,兩方的通信就會結束,UDP數據包傳送的過程當中,一方中斷,數據包有很大的可能丟失,還有可能傳來的數據包的順序是錯亂的;在效率方面,UDP要比TCP快的不只是一點點的問題,若終端有解析數據方法的函數,數據包就會源源不斷的傳送過來,然后反饋回去。
以上都是我自己的理解,下面是關于TCP協議通信的兩個類;
Server類:
復制代碼 代碼如下:

package TCP;
import java.io.*;
import java.net.*;
import javax.swing.*;
 public class Server {
     //服務器端的輸入流
    static  BufferedReader br;
     //服務器端的輸出流
    static  PrintStream ps;
     //服務器相關的界面組件
    static  JTextArea text;   
            JFrame frame;

    public Server(){
        //服務器端的界面的實例化
        JFrame frame=new JFrame("服務器端");
        text=new JTextArea();
        JScrollPane scroll =new JScrollPane(text);
        frame.add(scroll);
        frame.setVisible(true);
        frame.setSize(300,400);
        //這里設置服務器端的文本框是不可編輯的
        text.setEditable(false);
    }

    public static void main(String[] args) throws Exception{      
        new Server();    //生成服務器界面
        //通過服務器端構造函數  ServerSocket(port) 實例化一個服務器端口
        ServerSocket server=new ServerSocket(2000);
        text.append("監聽2000端口"+"/n");
        //實例化一個接受服務器數據的對象
        Socket client=server.accept();
        br =new BufferedReader(new InputStreamReader(client.getInputStream()));
        ps =new PrintStream(client.getOutputStream());       
        String msg;
        //如果輸入流不為空,將接受到的信息打印到相應的文本框中并反饋回收到的信息
        while ((msg =br.readLine())!=null) 
        {
            text.append("服務器端收到:"+msg+"/n");
            ps.println(msg);
            if(msg.equals("quit"))
            {  
                text.append("客戶端“2000”已退出!"+"/n");
                text.append("服務器程序將退出!");               
                break;
            }
        }
        ps.close();
        br.close();
        client.close();
    }
}

Client類:
復制代碼 代碼如下:

package TCP;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import java.net.*;
public class Client implements ActionListener{
   //這里有兩個圖形界面,一個是連接的frame,另一個和服務器通信的界面frame1   
    private  JFrame frame;
    private  JLabel adress;
    private  JLabel port;
             JTextField adresstext;
             JTextField porttext;
             JButton connect;

    private JFrame frame1;
    private JLabel shuru;
    private JPanel panel1;
    private JPanel panel2;
    private JLabel jieshou;
            JButton send;
    static JTextArea shurukuang;
    static TextArea jieshoukuang;

    //從服務端接受的數據流
    static BufferedReader br1;
    //從客戶端輸出的數據流
    static PrintStream ps;
    //從通信界面中的輸入框接受的數據流
    static BufferedReader br2;
    static Socket client;
    //將輸入框字符串轉換為字符串流所需的字符串的輸入流
    static ByteArrayInputStream stringInputStream ;

   public Client() {
       //連接界面的實例化
        frame=new JFrame();
        adress=new JLabel("IP 地址");
        port =new JLabel("端口號");
        adresstext=new JTextField("127.0.0.1",10);
        porttext=new JTextField("2000",10);
        connect=new JButton("連接");
            //連接界面的布局          
        frame.setLayout(new FlowLayout());
        frame.add(adress);
        frame.add(adresstext);
        frame.add(port);  
        frame.add(porttext);
        frame.add(connect);
        frame.setVisible(true);
        frame.setSize(200,150);          
        connect.addActionListener(this);
          //通信界面的實例化
        frame1=new JFrame();
        shuru=new JLabel("請輸入");
          shurukuang=new JTextArea("請輸入????",5,40); 

          panel1=new JPanel();
          panel1.add(shuru);
          panel1.add(shurukuang);
          panel1.setLayout(new FlowLayout());

          send=new JButton("發送");
          panel2=new JPanel();
          jieshou=new JLabel("已接受");

         jieshoukuang=new TextArea(8,60);    
          jieshoukuang.setEditable(false);

          panel2.add(jieshou);
          panel2.add(jieshoukuang);
          panel2.setLayout(new FlowLayout());       
          frame1.setLayout(new FlowLayout());
              //通信界面都的布局
          frame1.add(BorderLayout.NORTH,panel1);
          frame1.add(send);
          frame1.add(BorderLayout.SOUTH,panel2);
             //連接時通信界面是處于看不到的
          frame1.setVisible(false);
          frame1.setSize(500,350);
          send.addActionListener(this); 
            }
         //兩個界面當中都有相應的按鈕時間,為相應的時間添加動作
      public  void  actionPerformed(ActionEvent e) {
         if(e.getSource()==connect){   
          try {
                  //當觸發連接按鈕時,實例化一個客戶端
                client=new Socket("127.0.0.1",2000);   
                  //隱藏連接界面,顯示通信界面
                frame.setVisible(false);
                frame1.setVisible(true);
                jieshoukuang.append("已經連接上服務器!"+"/n");           
           } catch (IOException e1){
                 System.out.println("鏈接失?。?);
                e1.printStackTrace();
             }
         }
         //通信界面中的發送按鈕相應的時間處理
        if(e.getSource()==send){
              //將輸入框中的字符串轉換為字符串流
             stringInputStream = new ByteArrayInputStream((shurukuang.getText()).getBytes());
             br2 =new BufferedReader(new InputStreamReader(stringInputStream));
             String msg;
             try{
              while((msg=br2.readLine())!=null){   
                  ps.println(msg);   //將輸入框中的內容發送給服務器端       
                  jieshoukuang.append("向服務器發送:"+msg+"/n");
                  jieshoukuang.append("客戶端接受相應:"+br1.readLine()+"/n");
                  if(msg.equals("quit"))
                     {
                        jieshoukuang.append("客戶端將退出!");
                        br1.close();
                        ps.close();
                        client.close();
                        frame1.setVisible(false);
                        break;
                           }                     
                      }   
             }catch(IOException e2){
                 System.out.println("讀輸入框數據出錯!");                 
              }
             shurukuang.setText("");
          }
      } 

      public static void main(String[] args) throws IOException{
           new Client();  //實例化連接界面
           client=new Socket("127.0.0.1",2000);            
           //從服務端接受的數據 
           br1=new BufferedReader(new InputStreamReader(client.getInputStream()));
            //從客戶端輸出的數據
           ps =new PrintStream(client.getOutputStream());         
              }
        }

寫完這兩個類以后還是有幾個問題:
1)main 函數為什么非要用 static 來修飾?
2)緩沖對象 BufferedReader 為什么不能直接用于判斷,非要將讀到的數據賦值給字符串來進行操作?
3)在連接界面當中的 Connect 按鈕事件 當中我有實例化一個 客戶端的對象,但是我注釋掉主函數當中 client=new Socket("127.0.0.1",2000); 的這一句的時候,就會發現拋出 NULLPOINTEXCEPTION 異常,我很不理解?
希望有看到這文章的大牛們能不吝賜教,我也正在不停的翻著《Think in java》希望在某個不起眼的角落里面發現我的答案。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产在线拍揄自揄视频不卡99| 日韩精品视频在线观看网址| 成人性生交xxxxx网站| 久久久久国产精品www| 欧美夜福利tv在线| 欧美激情videoshd| 国产97色在线|日韩| 欧美巨乳在线观看| 国产亚洲欧美一区| 韩国福利视频一区| 九九久久久久久久久激情| 国产精品欧美激情| 91亚洲精华国产精华| 成人黄色短视频在线观看| 欧美另类在线播放| 青青草一区二区| 亚洲精品一区二区三区不| 日韩美女中文字幕| 久久激情视频免费观看| 日韩电影在线观看永久视频免费网站| 中文字幕亚洲情99在线| 国产视频一区在线| 色七七影院综合| 大胆人体色综合| 久久久久久综合网天天| 亚洲精品日韩在线| 最近更新的2019中文字幕| 久久久伊人欧美| 亚洲免费伊人电影在线观看av| 国产91免费观看| 亚洲精品456在线播放狼人| 日av在线播放中文不卡| 亚洲美女性视频| 亚洲а∨天堂久久精品9966| 精品久久香蕉国产线看观看gif| 亚洲国产97在线精品一区| 欧美日韩亚洲成人| 中文字幕亚洲综合久久筱田步美| 国产精品99久久久久久久久| 精品福利一区二区| 九九九久久国产免费| 岛国av一区二区三区| 亚洲性日韩精品一区二区| 国产精品国产福利国产秒拍| 日韩欧美在线视频| 欧美性少妇18aaaa视频| 亚洲a级在线观看| 日韩亚洲欧美成人| 欧美日韩亚洲高清| 久久综合电影一区| 青青草原成人在线视频| 国产精品福利在线观看网址| 日韩av在线免费观看| 欧美成人免费视频| 欧美性理论片在线观看片免费| 日本久久久久久| 国产欧美欧洲在线观看| 免费不卡欧美自拍视频| 精品国产欧美成人夜夜嗨| 精品女厕一区二区三区| 欧美日韩亚洲高清| 日韩经典第一页| 日韩国产激情在线| 精品久久香蕉国产线看观看亚洲| 国产日韩中文在线| 91精品视频在线看| 欧美性xxxxx极品| 日韩成人高清在线| 国产91免费看片| 91在线观看免费高清完整版在线观看| 日韩久久午夜影院| 最新中文字幕亚洲| 欧美日韩亚洲一区二区三区| 亚洲视频在线观看视频| 欧美亚洲国产视频| 国产一区二区三区毛片| 91在线视频九色| 国内精品小视频| 国产精品草莓在线免费观看| 欧美成人在线影院| 午夜精品久久久久久久久久久久| 日韩在线观看网站| 欧美天天综合色影久久精品| 免费不卡在线观看av| 欧美大全免费观看电视剧大泉洋| 911国产网站尤物在线观看| 国产日产欧美精品| 亚洲国产精品久久精品怡红院| 亚洲精品视频在线观看视频| 日本精品久久中文字幕佐佐木| 日韩免费电影在线观看| 国产精品久久国产精品99gif| 国产激情999| 久久99热精品这里久久精品| 国产精品成人免费视频| 高清亚洲成在人网站天堂| www.日韩不卡电影av| 国产成人精品电影| 日韩在线欧美在线| 美日韩精品免费视频| 亚洲精品美女久久久久| 国产精品久久久久久久久| 成人性生交xxxxx网站| 亚洲美女精品久久| 精品久久久在线观看| 久久国产精品免费视频| 国内精品小视频在线观看| 性色av一区二区三区红粉影视| 伊是香蕉大人久久| 国产精品爱啪在线线免费观看| 国产美女精彩久久| 日韩视频免费中文字幕| 91精品久久久久久久久久久| 7m第一福利500精品视频| 国产性色av一区二区| 91影院在线免费观看视频| 国产精品激情av电影在线观看| 欧美—级高清免费播放| 欧美极品美女视频网站在线观看免费| 青青草99啪国产免费| 亚洲大胆人体视频| 亚洲天堂av图片| 欧洲亚洲妇女av| 成人写真福利网| 日韩精品福利在线| 亚洲摸下面视频| 日韩成人免费视频| 国产精品爽爽爽爽爽爽在线观看| 日韩电影免费观看中文字幕| 亚洲精品中文字| 日韩在线播放视频| 精品久久久久久久久久| 日韩av中文字幕在线免费观看| 亚洲激情自拍图| 成人精品视频在线| 久久免费视频网| 亚洲国产第一页| 欧洲永久精品大片ww免费漫画| 26uuu国产精品视频| 美女久久久久久久久久久| 91精品一区二区| 蜜月aⅴ免费一区二区三区| 精品在线观看国产| 久久久久久91香蕉国产| 午夜精品蜜臀一区二区三区免费| 国产成人一区二区在线| 亚洲一区二区三区久久| 亚洲免费影视第一页| 97超级碰在线看视频免费在线看| 欧美二区在线播放| 亚洲成人av中文字幕| 欧美激情精品久久久久久久变态| 日本老师69xxx| 日韩一区二区在线视频| 精品丝袜一区二区三区| 久久久久久综合网天天| 午夜欧美大片免费观看| 中文字幕免费精品一区高清| 国产z一区二区三区| 亚洲精品福利资源站| 亚洲视频视频在线| 欧美日韩亚洲91| 亚洲免费成人av电影| 欧美床上激情在线观看|