Java學習筆記--網路程式設計Socket
**今天學習了網路程式設計,主要用到Socket語句。
1.首先了解網路程式設計三要素
a.ip:一個計算機的標識,是一個網路之間互聯的協議(Internet Protocol),每個終端有且僅有一個ip地址。
b.埠:裝置與外界進行通訊的出口,用來進行通訊,分為物理埠和邏輯埠,這裡用到的埠是邏輯埠,
有效埠的範圍在0~65535之間,是應用程式在計算機內部對應的表示。
c.協議:計算機網路中用於交換資訊而規則,標準或約定的集合。這裡指TCP/UDP。
2.TCP/UDP協議
TCP協議:是一種面向連線的,可靠的基於位元組流的傳輸層通訊協議,需要建立連線,形成連線通道,
資料可以使用連線通道直接進行傳輸,無大小限制,效率比較低
UDP協議:User Datagrem Protocol,使用者資料包協議,一種無連線的傳輸層協議,和TCP協議相同用於處理資料包,
UDP有不提供資料包的分組,組裝,還有對資料包進行排序的缺點,所以我們無法確定資料包是否被安全
傳達。效率較TCP來說比較高,但是不安全。
3.學習中用到的Java類
InetAddress:IP地址描述類,為了方便我們對IP地址的獲取和操作,常見功能有:
public static InerAddress getByName(String host);通過主機名或IP地址得到InetAdress類
public String getHostAddress();返會ip地址字串
public String getHostName(); 返回ip地址主機名。
import java.net.InetAddress;
import java.net.UnknownHostException;
public class InetAddressDemo {
public static void main(String[] args) throws Exception {
InetAddress address = InetAddress.getByName("192.168.20.25");
String hostName = address.getHostName();
System.out.println(hostName);
}
}
4.Socket程式設計(網路程式設計)
a.Socket套接字具有唯一標識的IP地址和埠號組合在一起才能構成唯一能識別的識別符號套接字。
b.Socket程式設計機制:
通訊雙方都有Socket。
網路通訊實際就是Socket間的通訊。
資料在兩個Socket之間進行IO傳輸。
c.UDP通訊
傳送步驟:建立UDP傳送資料端的Socket物件;建立資料包並給出資料,把資料打包;通過Socket物件傳送資料包;釋放資源。
接收步驟:建立UDP接收端的Socket物件;建立一個接收資料的資料包;接收資料,將資料放在接收的資料包中;解析資料包,並把資料顯示在控制檯上;釋放資源。
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;
public class UdpClient {
public static void main(String[] args) throws Exception {
//1.建立傳送端的socket物件
DatagramSocket ds = new DatagramSocket();
InetAddress address = InetAddress.getByName("192.168.20.25");
int port = 9999;
//2.建立鍵盤錄入物件
Scanner sc = new Scanner(System.in);
String line;
while ((line=sc.nextLine())!=null) {
//鍵盤錄入的資料line
byte[] buf = line.getBytes();
int length = buf.length;
DatagramPacket dp = new DatagramPacket(buf, length, address, port);
//傳送資料包
ds.send(dp);
}
//釋放資源
ds.close();
}
}
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class UdpServer {
public static void main(String[] args) throws Exception {
//建立接收端的socket物件
DatagramSocket ds = new DatagramSocket(9999);
//接受來自客戶端的資料
while (true) {
//建立資料包
byte[] buf = new byte[1024];
int length = buf.length;
DatagramPacket dp = new DatagramPacket(buf, length);
//接受來自客戶端的資料
ds.receive(dp);
//解析資料包中的資料
byte[] data = dp.getData();
int len = dp.getLength();
System.out.println(new String(data, 0, len));
}
}
}
d.TCP通訊
傳送端:建立TCP底層傳輸資料Socket物件(指定伺服器ip及埠號),如Socket sk = new Socket(“196.168.25.25”,9999);獲取輸出流,並寫入資料,如OutputStream outputStream = sk.getOutputStream();
outputStream.write(“Hello”.getBytes());
釋放資源;
接收端:建立TCP協議接收端Socket物件(ServerSocket);監聽客戶端連線(Socket socket = new ServerSocket().accpet();獲取輸入流,並讀取資料,顯示在資料臺;釋放資源(socket.close())。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class ServerThread implements Runnable{
private Socket sk;
public ServerThread(Socket sk){
this.sk = sk;
}
@Override
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(sk.getInputStream()));
BufferedWriter bw = new BufferedWriter(new FileWriter(UUIDUtils.getFileName()));
String line;
while((line = br.readLine()) != null ){
bw.write(line);
bw.newLine();
bw.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.print````````
tackTrace();
}
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
/**
* 2.6
需求:客戶端讀取文字檔案中的內容傳送給服務端,服務端將內容控制檯輸出
* 客戶端:
* 1.讀取文字檔案,一次讀取一行
* 2.將讀取到的內容寫入通道,一次寫一行
* 3.釋放資源
* 伺服器端:
* 1.從通道中讀取資料,一次讀取一行
* 2.輸出
*/
public class TcpClient {
public static void main(String[] args) throws Exception {
Socket sk = new Socket("192.168.20.25", 10010);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(sk.getOutputStream()));
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
String line;
while((line = br.readLine()) != null ){
bw.write(line);
bw.newLine();
bw.flush();
}
br.close();
bw.close();
sk.close();
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10010);
while(true){
Socket sk = ss.accept();
new Thread(new ServerThread(sk)).start();
}
}
}
import java.util.UUID;
public class UUIDUtils {
public static String getFileName(){
String fileName = UUID.randomUUID().toString();
fileName = fileName.replaceAll("-", "") + ".txt";
return fileName;
}
}
相關文章
- python網路程式設計學習筆記(3):socket網路伺服器Python程式設計筆記伺服器
- 學習記錄|Socket程式設計程式設計
- 網路程式設計學習筆記程式設計筆記
- 黑馬程式設計師——Java學習筆記之⑦——“網路程式設計”程式設計師Java筆記
- Java Tcp協議socket程式設計學習JavaTCP協議程式設計
- Socket 程式設計 (網路篇)程式設計
- Java IO學習筆記四:Socket基礎Java筆記
- Python網路Socket程式設計Python程式設計
- 雲端計算學習路線教程程式碼筆記:Shell程式設計筆記程式設計
- Java程式設計思想學習筆記1 - 內部類Java程式設計筆記
- 重學Java設計模式-學習筆記(1)Java設計模式筆記
- 系統程式設計學習筆記程式設計筆記
- Linux學習/TCP程式設計學習筆記LinuxTCP程式設計筆記
- Java Socket程式設計Java程式設計
- Java Socket程式設計Java程式設計
- Java 網路程式設計 —— Socket 詳解Java程式設計
- Java設計模式學習筆記(一) 設計模式概述Java設計模式筆記
- 【學習筆記】網路流筆記
- [網路]NIO學習筆記筆記
- 網路流學習筆記筆記
- Java併發程式設計學習筆記----執行緒池Java程式設計筆記執行緒
- 程式設計基礎·Java學習筆記·物件導向(下)程式設計Java筆記物件
- Java程式設計思想(2nd)學習筆記(7) (轉)Java程式設計筆記
- Java程式設計思想(2nd)學習筆記(6) (轉)Java程式設計筆記
- java程式設計師程式設計筆試基礎學習Java程式設計師筆試
- 黑馬程式設計師——Java學習筆記之⑧——“Java新技術”程式設計師Java筆記
- 好程式設計師大資料學習路線分享Map學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線分享Actor學習筆記程式設計師大資料筆記
- Golang 學習筆記——tun/tap 程式設計Golang筆記程式設計
- 結構化程式設計--學習筆記程式設計筆記
- Javascript高階程式設計 學習筆記JavaScript程式設計筆記
- ROS串列埠程式設計學習筆記ROS串列埠程式設計筆記
- spark學習筆記--進階程式設計Spark筆記程式設計
- Linux Shell 程式設計學習筆記Linux程式設計筆記
- 《Windows 程式設計》學習筆記(五) (轉)Windows程式設計筆記
- 《Windows 程式設計》學習筆記(四) (轉)Windows程式設計筆記
- 《Windows 程式設計》學習筆記(三) (轉)Windows程式設計筆記
- JAVA程式設計學習記錄(安裝Java)Java程式設計