使用socket進(jìn)行單線程的網(wǎng)絡(luò)編程

連接建立過程:Server端服務(wù)器監(jiān)聽端口的連接請求,Client端向Server服務(wù)端發(fā)出連接請求,Server服務(wù)端調(diào)用accep()函數(shù)發(fā)回接受請求消息。
步驟有:
1.創(chuàng)建Socket對象;
2.打開輸入輸出流,用于接收網(wǎng)絡(luò)端口的消息;
3.進(jìn)行讀寫操作;

  • 客戶端Client的程序?qū)崿F(xiàn):
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.Socket;
    import java.util.Scanner;

     public class Client {
        public static final int port = 3001;
    
        public static void main(String[] args) {
            try {
                Socket s = new Socket("192.168.0.102", port);
    \\try catch用來在連接建立不成功時產(chǎn)生異常;
    \\192.168.0.102為服務(wù)器ip地址;端口號port從0到1023為系統(tǒng)保留,因此最好用1023以上的
                System.out.println("服務(wù)連接成功.........");
     \\若連接過久,重新運行程序時會運行出錯。
          BufferedReader input = new BufferedReader(new     InputStreamReader(s.getInputStream()));
      \\getInputStream()只接收字節(jié),而InputStreamReader()使之變?yōu)樽址?,BufferedReaderI()使之變?yōu)樽址?      BufferedWriter output = new BufferedWriter(new        OutputStreamWriter(s.getOutputStream()));
          Scanner scan = new Scanner(System.in);
          String clientMsg;
          String serverMsg;
          clientMsg = scan.nextLine();
          
          while (!clientMsg.startsWith("bye") ) {
                 output.write("client say" + clientMsg + "\r\n");
     \\ 這里的\r\n為換行符,因為readLine()要讀到換行符才產(chǎn)生作用。
              output.flush();
              serverMsg=input.readLine();
              System.out.println(serverMsg);
              clientMsg = scan.nextLine();
          }
          s.close();
          scan.close();
          input.close();
          output.close();
    
      } catch (IOException e) {
    
          e.printStackTrace();
      }
    }
    
    }
    
  • 服務(wù)端程序?qū)崿F(xiàn):
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Scanner;

    public class Server {
      public static final int port=3002;
      public static void main(String[] args) {
      try {
          ServerSocket s = new ServerSocket(port);
          System.out.println("服務(wù)器已啟動.........");
          Socket socket;
          socket = s.accept();
          System.out.println("已建立連接");
      BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
      BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    
      String serverMsg;
      String clientMsg;
      Scanner scan = new Scanner(System.in);
      clientMsg = input.readLine();
      while(!clientMsg.startsWith("bye")){
          System.out.println(clientMsg);
          serverMsg = scan.nextLine();
          output.write("server say"+serverMsg+"\r\n");
          output.flush();
          clientMsg = input.readLine();
      }
      System.out.println("關(guān)閉連接....");
      s.close();
      scan.close();
      socket.close();
    }
      catch (IOException e) {
          
          e.printStackTrace();
      }
     }
    }
    

    這是單個端口的socket編程,而若要進(jìn)行多個客戶端的socket編程則要用到多線程的知識,在此不贅述。
    要問我代碼為什么寫得這么屌?戳下面的鏈接你就知道,想成為碼王一樣的男人嗎?我的代碼都放在那了,想要嗎?還等什么?趕快去拿吧??!

http://qingke.me/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容