国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - java中TCP/UDP詳細總結(jié)

java中TCP/UDP詳細總結(jié)

2020-09-12 16:01wbb Java教程

本篇文章對Java中的TCP/UDP知識點進行了歸納總結(jié)分析。需要的朋友參考下

TCP/UDP:TCP主要是面向連接的協(xié)議,它包含有建立和拆除連接,保證數(shù)據(jù)流的順序和正確性等功能。

每次對TCP中間的數(shù)據(jù)操作相當(dāng)于對一個數(shù)據(jù)流進行訪問。它最典型的特征就是那三次握手的建立連接過程。Server端所要做的事情主要是建立一個通信的端點,然后等待客戶端發(fā)送的請求。典型的處理步驟如下:

1. 構(gòu)建一個ServerSocket實例,指定本地的端口。這個socket就是用來監(jiān)聽指定端口的連接請求的。

2.重復(fù)如下幾個步驟:

a. 調(diào)用socket的accept()方法來獲得下面客戶端的連接請求。通過accept()方法返回的socket實例,建立了一個和客戶端的新連接。

b.通過這個返回的socket實例獲取InputStream和OutputStream,可以通過這兩個stream來分別讀和寫數(shù)據(jù)。

c.結(jié)束的時候調(diào)用socket實例的close()方法關(guān)閉socket連接。

TCP服務(wù)器端:

java" id="highlighter_776007">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class TCPServer {
  public static void main(String[] args){
      try{
        ServerSocket server=new ServerSocket();
        SocketAddress address=new InetSocketAddress(InetAddress.getLocalHost(),10001);
        server.bind(address);
        System.out.println("等待連接客戶端...");
        Socket client = server.accept();
        System.out.println("connected with"+client.getRemoteSocketAddress());
        PrintWriter socketOut = new PrintWriter(client.getOutputStream());
        System.out.println("等待客戶端的消息...");
        byte buf[] = new byte[1024];
        if ( client.getInputStream().read(buf) > 0 ) {
          System.out.println("收到的消息: " + new String(buf));
        }
        System.out.println("發(fā)送消息給客戶端...");
        String sendStr = "服務(wù)器返回的信息";
        socketOut.write(sendStr);
        socketOut.flush();
        socketOut.close();
        client.close();
        server.close();
      }catch (IOException e) {
        System.out.println(e.getMessage());
        e.printStackTrace();
      }
  }
}

TCP客戶端:

1.構(gòu)建Socket實例,通過指定的遠程服務(wù)器地址和端口來建立連接。

2.通過Socket實例包含的InputStream和OutputStream來進行數(shù)據(jù)的讀寫。

3.操作結(jié)束后調(diào)用socket實例的close方法,關(guān)閉。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class TCPClient {
  public static void main(String[] args){
    try{
      final Socket socket = new Socket();
      SocketAddress address = new InetSocketAddress(InetAddress.getLocalHost(), 10001);
      System.out.println("連接服務(wù)端 ...");
      socket.connect(address);
      PrintWriter socketOut = new PrintWriter(socket.getOutputStream());
      BufferedReader socketIn = new BufferedReader(
          new InputStreamReader(socket.getInputStream()) );
      String sendStr = "客戶端發(fā)送的消息";
      System.out.println("發(fā)送消息給服務(wù)端 ...");
      socketOut.write(sendStr);
      socketOut.flush();
      System.out.println("等待服務(wù)端的消息 ...");
      String receiveStr = socketIn.readLine();
      System.out.println("收到的消息: " + receiveStr);     
      socketOut.close();
      socketIn.close();
      socket.close();
    }catch (IOException e) {
      System.out.println(e.getMessage());
      e.printStackTrace();
    }
  }
}

UDP(User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議)

UDP和TCP有兩個典型的區(qū)別,一個就是它不需要建立連接,另外就是它在每次收發(fā)的報文都保留了消息的邊界。

因為UDP協(xié)議不需要建立連接,它的過程如下:

1. 構(gòu)造DatagramSocket實例,指定本地端口。

2. 通過DatagramSocket實例的receive方法接收DatagramPacket.DatagramPacket中間就包含了通信的內(nèi)容。

3. 通過DatagramSocket的send和receive方法來收和發(fā)DatagramPacket.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class UDPServer {
  public static void main(String args[]) {
    DatagramSocket socket = null;
    DatagramPacket datapacket = null;
    InetSocketAddress address = null;
    try {
      address = new InetSocketAddress(InetAddress.getLocalHost(), 7778);
      socket = new DatagramSocket(address);
      // socket.bind(address);
      byte buf[] = new byte[1024];
      datapacket = new DatagramPacket(buf, buf.length);
      System.out.println("block for receive messages...");
      socket.receive(datapacket);
      buf = datapacket.getData();
      InetAddress addr = datapacket.getAddress();
      int port = datapacket.getPort();
      System.out.println("Message Content: " + new String(buf) );
      System.out.println("Receive From " + addr + ":" + port);     
      SocketAddress toAddress = datapacket.getSocketAddress();
      String sendStr = "I'm Server, this is the message for client.";
      buf = sendStr.getBytes();
      datapacket = new DatagramPacket(buf, buf.length);
      datapacket.setSocketAddress(toAddress);
      socket.send(datapacket);
      System.out.println("message sended");
     //釋放資源
      socket.close();
    } catch (UnknownHostException e) {
      e.printStackTrace();
    } catch (SocketException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

UDP客戶端的步驟也比較簡單,主要包括下面3步:

1. 構(gòu)造DatagramSocket實例。

2.通過DatagramSocket實例的send和receive方法發(fā)送DatagramPacket報文。

3.結(jié)束后,調(diào)用DatagramSocket的close方法關(guān)閉。

因為和TCP不同,UDP發(fā)送報文的時候可以在同一個本地端口隨意發(fā)送給不同的服務(wù)器,一般不需要在UDP的DatagramSocket的構(gòu)造函數(shù)中指定目的服務(wù)器的地址。

另外,UDP客戶端還有一個重要的不同就是,TCP客戶端發(fā)送echo連接消息之后會在調(diào)用read方法的時候進入阻塞狀態(tài),而UDP這樣卻不行。因為UDP中間是可以允許報文丟失的。如果報文丟失了,進程一直在阻塞或者掛起的狀態(tài),則進程會永遠沒法往下走了。

所以會一般設(shè)置一個setSoTimeout方法,指定在多久的時間內(nèi)沒有收到報文就放棄。也可以通過指定一個數(shù)字,循環(huán)指定的次數(shù)來讀取報文,讀到就返回,否則就放棄。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class UDPClient {
  public static void main(String args[]) {
    try {
      DatagramSocket getSocket = new DatagramSocket();
      DatagramPacket datapacket = null;
      InetSocketAddress toAddress = new InetSocketAddress(InetAddress.getLocalHost(), 7778);  
      String sendStr = "I'm client, this is the message for server.";
      byte buf[] = sendStr.getBytes();
      datapacket = new DatagramPacket(buf, buf.length);
      datapacket.setSocketAddress(toAddress);
      getSocket.send(datapacket);
      System.out.println("message sended");
      System.out.println("block for receive messages...");
      getSocket.receive(datapacket);
      buf = datapacket.getData();
      System.out.println("Message Content: " + new String(buf));
      getSocket.close();
    } catch (SocketException e) {
      e.printStackTrace();
    } catch (UnknownHostException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

以上內(nèi)容,需要的朋友可以參考

原文鏈接:http://www.2cto.com/kf/201702/598055.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产日韩欧美 | 色xxx| 五月婷婷婷婷 | 精品视频在线免费观看 | 精品一区免费 | 亚洲毛片在线 | 91久久综合 | 久久av一区二区三区亚洲 | 永久av| 99久久免费看视频 | 国产精品久久久久久亚洲调教 | 欧美日本精品 | 亚洲性片| 亚洲乱码一区二区三区在线观看 | 精品国偷自产国产一区 | 欧美日韩视频在线第一区 | av网站免费在线观看 | 九九综合九九 | 国产在线拍揄自揄拍视频 | 中文字幕自拍偷拍 | 日韩欧美在线一区二区 | 在线观看三级网站 | 不卡视频在线 | 欧美大片免费观看 | 综合二区 | 日韩高清在线一区 | 一级一片在线播放在线观看 | 亚洲日本乱码一区两区在线观看 | 精品一区视频 | 成人免费大片黄在线播放 | 91麻豆精品国产91久久久资源速度 | 亚洲a网 | 四虎永久在线观看 | 国产高清精品在线 | 免费一级片在线观看 | 日本一区二区三区在线视频 | 精品国产乱码久久久久久图片 | 噜噜噜噜噜在线视频 | 欧美一区不卡 | 麻豆自拍偷拍 | 欧美一级黄色片网站 |