java通訊端(socket)執行個體

來源:互聯網
上載者:User

標籤:ati   分配   server   接收   void   就會   tcp協議   stream   建立   

用戶端socket

流程:

1、串連遠程主機

2、發送資料

3、接收資料

4、關閉流與socket串連

執行個體:

import java.io.*;import java.net.Socket;import java.util.Date;/** * Created by CLY on 2017/7/11. */public class ClientSocket {    public static void main(String[] arg){        int port = 233;//與之已連線的服務端通訊端的連接埠號碼        String host = "127.0.0.1";//與之已連線的服務端通訊端ip地址        Socket socket = null;        try {            //建立socket串連,即在該Socket建構函式返回之前,就會與遠程主機建立串連,如果未能串連,則會拋出異常。            socket = new Socket(host, port);            //擷取輸出資料流,向伺服器端發送目前時間            OutputStream outputStream = socket.getOutputStream();            Writer writer = new OutputStreamWriter(outputStream);            String now_date = new Date().toString();            writer.write("用戶端目前時間為——"+now_date);            writer.flush();            ////關閉用戶端的輸出資料流。相當於給流中加入一個結束標記-1.這個樣子伺服器的輸入資料流的reaLine方法就會讀到一個-1,然後結束readLIne方法。            socket.shutdownOutput();            //擷取輸入資料流,並讀取伺服器端的響應資訊            InputStream inputStream= socket.getInputStream();            BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));            String server_info = null;            while((server_info=br.readLine())!=null){                System.out.println("服務端傳過來的值:"+server_info);            }        } catch (IOException e) {            e.printStackTrace();        } finally {            //如果socket不為null,則釋放掉它            if (socket!=null){                try {                    socket.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }}

 

服務端Socket

流程:

1、綁定連接埠

2、監聽入站資料

3、在綁定的連接埠上接受來自遠程機器的串連

4、接收資料

5、發送資料

6、關閉流與socket串連

執行個體:

import java.io.*;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;import java.util.Date;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * Created by CLY on 2017/7/11. */public class MyServerSocket {    public static void main(String[] arg){        /**         * 根據tcp協議可知,所謂通訊端(socket)是指一個由“ip地址+連接埠”組成的組合。         * 而每一台主機的ip地址都是確定的,不需要我們來指定,         * 所以構建伺服器socket的第一步就是確定連接埠         */        try {            int port = 233;//連接埠號碼            int queueLength = 50;//最大入站串連            InetAddress bindAddress = InetAddress.getByName("127.0.0.1");//只監聽該ip的指定連接埠            ExecutorService pool = Executors.newFixedThreadPool(50);//建立一個最大容量為50的線程池,為每一個入站串連分配一條線程。            //建立一個連接埠為“233”的伺服器socket            ServerSocket serverSocket = new ServerSocket(port);            //建立一個連接埠為233的伺服器socket,且隊列一次最多能儲存50個入站串連            //ServerSocket serverSocket = new ServerSocket(port,queueLength);            //假設一台主機有多個ip地址,則伺服器socket會預設在所有ip地址的指定連接埠上監聽,但可以指定其只監聽指定ip的連接埠。            //ServerSocket serverSocket = new ServerSocket(port,queueLength,bindAddress);            while (true){                //accept()調用會阻塞,會一直等到有用戶端串連到指定socket連接埠為止。                final Socket connection = serverSocket.accept();                //線程池中拿取一條線程來處理socket串連。然後主程式運行下一個迴圈,繼續等待下一個用戶端的訪問。                pool.execute(new Runnable() {                    public void run() {                        try {                            //從輸入資料流中讀取擷取用戶端傳過來的值                            InputStream inputStream= connection.getInputStream();                            BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));                            String client_info = null;                            while((client_info=br.readLine())!=null){                                System.out.println("用戶端傳過來的值:"+client_info);                            }                            //測試:將目前時間寫入流中返回給用戶端                            Writer writer = new OutputStreamWriter(connection.getOutputStream());                            String nowData = new Date().toString();                            writer.write("服務端目前時間為——"+nowData);                            writer.flush();                        } catch (IOException e) {                            e.printStackTrace();                        } finally {                            try {                                //關閉socket串連                                connection.close();                            } catch (IOException e) {                                e.printStackTrace();                            }                        }                    }                });            }        } catch (IOException e) {            e.printStackTrace();        }    }}

 

java通訊端(socket)執行個體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.