2019-03-03socKet編程

SocKet編程

套接字使用TCP提供了兩臺計算機之間的通信機制。

以下步驟在兩臺計算機之間使用套接字建立TCP連接時會出現(xiàn):
1.服務(wù)器實例化一個 ServerSocket 對象,表示通過服務(wù)器上的端口通信。
2.服務(wù)器調(diào)用 ServerSocket 類的 accept() 方法,該方法將一直等待,直到客戶端連接到服務(wù)器上給定的端口。
3.服務(wù)器正在等待時,一個客戶端實例化一個 Socket 對象,指定服務(wù)器名稱和端口號來請求連接。
4.Socket 類的構(gòu)造函數(shù)試圖將客戶端連接到指定的服務(wù)器和端口號。如果通信被建立,則在客戶端創(chuàng)建一個 Socket 對象能夠與服務(wù)器進行通信。
5.在服務(wù)器端,accept() 方法返回服務(wù)器上一個新的 socket 引用,該 socket 連接到客戶端的 socket。

實現(xiàn)

1.創(chuàng)建TcpServer類

package Net;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer {

    public static void main(String[] args) throws Exception {
        ServerSocket server = new ServerSocket(9091);
        try {
            System.out.println("等待遠程連接,端口號為:" + server.getLocalPort() + "...");
            Socket client = server.accept();
            System.out.println("遠程主機地址:" + client.getRemoteSocketAddress());
            try {
                BufferedReader input = new BufferedReader(new InputStreamReader(client.getInputStream()));
                boolean flag = true;
                int count = 1;
                while (flag) {
                    System.out.println("客戶端要開始發(fā)請求了,這是第" + count + "次!");
                    count++;
                    String line = input.readLine();
                    if (line.equals("exit")) {
                        flag = false;
                        System.out.println("客戶端不想玩了!");
                    } else {
                        System.out.println("客戶端說: " + line);
                    }

                }
            } finally {
                client.close();
            }

        } finally {
            server.close();
        }
    }
}

2.創(chuàng)建TcpClient類

package Net;

import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class TcpClient {

    public static void main(String[] args) throws Exception {
        String serverName = "127.0.0.1";
        int port = 9091;

        System.out.println("連接到主機:" + serverName + " ,端口號:" + port);

        Socket client = new Socket(serverName, port);
        System.out.println("遠程主機地址:" + client.getRemoteSocketAddress());

        try {
            PrintWriter output = new PrintWriter(client.getOutputStream(), true);
            Scanner cin = new Scanner(System.in);
            String words;

            while (cin.hasNext()) {
                words = cin.nextLine();
                output.println(words);
                System.out.println("寫出了數(shù)據(jù):"  + words);
            }

            cin.close();
        } finally {
            client.close();
        }
    }

}

3.先運行服務(wù)端程序再運行客戶端程序

等待遠程連接,端口號為:9091...
遠程主機地址:/127.0.0.1:61397
客戶端要開始發(fā)請求了,這是第1次!
客戶端說: 
客戶端要開始發(fā)請求了,這是第2次!
客戶端說: aaa
客戶端要開始發(fā)請求了,這是第3次!
客戶端說: aa
客戶端要開始發(fā)請求了,這是第4次!
E:\applocation\JAVA\jdk\bin\java.exe "-javaagent:E:\applocation\Intellij\IntelliJ IDEA 2018.2.5\lib\idea_rt.jar=61396:E:\applocation\Intellij\IntelliJ IDEA 2018.2.5\bin" -Dfile.encoding=UTF-8 -classpath E:\applocation\JAVA\jdk\jre\lib\charsets.jar;E:\applocation\JAVA\jdk\jre\lib\deploy.jar;E:\applocation\JAVA\jdk\jre\lib\ext\access-bridge-64.jar;E:\applocation\JAVA\jdk\jre\lib\ext\cldrdata.jar;E:\applocation\JAVA\jdk\jre\lib\ext\dnsns.jar;E:\applocation\JAVA\jdk\jre\lib\ext\jaccess.jar;E:\applocation\JAVA\jdk\jre\lib\ext\jfxrt.jar;E:\applocation\JAVA\jdk\jre\lib\ext\localedata.jar;E:\applocation\JAVA\jdk\jre\lib\ext\nashorn.jar;E:\applocation\JAVA\jdk\jre\lib\ext\sunec.jar;E:\applocation\JAVA\jdk\jre\lib\ext\sunjce_provider.jar;E:\applocation\JAVA\jdk\jre\lib\ext\sunmscapi.jar;E:\applocation\JAVA\jdk\jre\lib\ext\sunpkcs11.jar;E:\applocation\JAVA\jdk\jre\lib\ext\zipfs.jar;E:\applocation\JAVA\jdk\jre\lib\javaws.jar;E:\applocation\JAVA\jdk\jre\lib\jce.jar;E:\applocation\JAVA\jdk\jre\lib\jfr.jar;E:\applocation\JAVA\jdk\jre\lib\jfxswt.jar;E:\applocation\JAVA\jdk\jre\lib\jsse.jar;E:\applocation\JAVA\jdk\jre\lib\management-agent.jar;E:\applocation\JAVA\jdk\jre\lib\plugin.jar;E:\applocation\JAVA\jdk\jre\lib\resources.jar;E:\applocation\JAVA\jdk\jre\lib\rt.jar;E:\BaiduNetdiskDownload\data\coding-112\DesignPatterns\out\production\DesignPatterns Net.TcpClient
連接到主機:127.0.0.1 ,端口號:9091
遠程主機地址:/127.0.0.1:9091

aaa
寫出了數(shù)據(jù):
寫出了數(shù)據(jù):aaa
aa
寫出了數(shù)據(jù):aa

Process finished with exit code -1

?著作權(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)容