/*
* TCP協(xié)議
* TCP與UDP協(xié)議的區(qū)別:
* UDP;
* 1. 將數(shù)據(jù)封裝為數(shù)據(jù)包患亿,面向無連接;
* 2. 每個(gè)數(shù)據(jù)包大小為64k;
* 3. 因?yàn)闊o連接匀奏,所有不可靠:
* 4. 因?yàn)椴恍枰⑦B接蛔翅,所有速度快:
* 5. UDP通信是部分服務(wù)端和客戶端的,只分發(fā)送與接收端:
*
* TCP:
*1. TCP是基于I/O流進(jìn)行數(shù)據(jù)的傳輸,是面向連接的(首先要建立連接才能進(jìn)行通信);
*2. TCP進(jìn)行數(shù)據(jù)傳輸沒有數(shù)據(jù)大小限制概荷;
*3. 面向連接秕岛,通過3次捂手的機(jī)制保障數(shù)據(jù)的完整性,是一個(gè)可靠的協(xié)議;
*4. tcp是面向連接的所以慢误证;
*5. 嚴(yán)格區(qū)分客戶端和服務(wù)端;
*
*TCP的Socket類
*Socket 客戶端類
*說明:TCP的客戶端一旦啟動(dòng)继薛,馬上會(huì)與服務(wù)端建立連接
*ServerSocket 服務(wù)端類
*
*TCP的客戶端使用步驟:
*1. 建立TCP的客戶端服務(wù)
*2. 獲取對(duì)應(yīng)的流對(duì)象;
*3. 玲輸出流輸出數(shù)據(jù):
*4. 關(guān)閉資源;
*
*TCP服務(wù)端的使用步驟:
* 1. 建立TCP的服務(wù)端;
* 2. 接收客戶端的請(qǐng)求產(chǎn)生一個(gè)Scoket:
* 2. 獲取對(duì)應(yīng)的對(duì)象獲取到輸入流:
* 4.使用輸入流輸出數(shù)據(jù)愈捅;
*/
package com.lin.michael;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
//客戶端
public class Demo06 {
public static void main(String[] args) throws UnknownHostException, IOException{
//1.建立tcp的服務(wù)
Socket socket = new Socket(InetAddress.getLocalHost(), 9090);
//2.獲取到Socket輸出流對(duì)象
OutputStream outputStream = socket.getOutputStream();
//3.利用輸出流輸出數(shù)據(jù)
outputStream.write("你好遏考,吃飯了嗎".getBytes());
//接收來自服務(wù)端的數(shù)據(jù)
InputStream inputStream = socket.getInputStream();
byte[] buf = new byte[1024];
int length = 0;
length = inputStream.read(buf);
System.out.println("客戶端接收的數(shù)據(jù):" + new String(buf, 0, length));
//4.關(guān)閉資源
//outputStream.close();s
socket.close();
}
}
===============================================
/*
* 服務(wù)端socket
*
*/
package com.lin.michael;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
//服務(wù)端
public class Demo07 {
public static void main(String[] args) throws IOException{
//1.建立tcp的服務(wù)端
ServerSocket serverSocket = new ServerSocket(9090);
//2. 調(diào)用ServerSocket對(duì)象的accept()的作用是接收連接,也是一個(gè)是阻塞型的方法蓝谨,接收可短的連接灌具,沒有客戶端請(qǐng)求的連接的時(shí)候會(huì)一直等下去,獲取到一個(gè)Sokcet對(duì)象
Socket socket = serverSocket.accept();
//3. 從socket總獲取輸入流譬巫,輸出數(shù)據(jù)
InputStream inputStream = socket.getInputStream();
byte[] buf = new byte[1024];
int length = 0;
length = inputStream.read(buf);
System.out.println("服務(wù)端接收的數(shù)據(jù):" + new String(buf, 0, length));
//獲取Socket的輸入流對(duì)象咖楣,向客戶端發(fā)送數(shù)據(jù)
OutputStream outputStream = socket.getOutputStream();
outputStream.write("客戶端你好啊".getBytes());
//關(guān)閉資源
serverSocket.close();
}
}