马士兵学习笔记-Java基础网络编程
生活随笔
收集整理的這篇文章主要介紹了
马士兵学习笔记-Java基础网络编程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?TCP:可靠的
建立連接:三次握手
第一次:客戶端向服務端發送小
第二次:服務端向客戶端確認收到消息
第三次:客戶端向服務端發送消息確定知道服務端收到客戶端發送的消息
釋放連接:四次揮手
第一次揮手:客戶端向服務端發送消息請求斷開
第二次揮手:服務端向客戶端發送已經收到請求斷開消息
第三次揮手:服務段再次向客戶端發送已經收到請求斷開消息
第四次揮手:客戶端向服務發送斷開消息
UDP:不可靠
?直接發包,不確認
InetAddress,InetSocketAddress獲取IP
public static void main(String[] args) throws UnknownHostException {InetAddress inetAddress0 = InetAddress.getByName("192.168.31.1");//封裝ipSystem.out.println(inetAddress0);InetAddress inetAddress1 = InetAddress.getByName("localhost");//封裝本機ip地址System.out.println(inetAddress1);InetAddress inetAddress2 = InetAddress.getByName("DESKTOP-S6L70L0");//封裝計算機名System.out.println(inetAddress2);InetAddress inetAddress3 = InetAddress.getByName("www.baidu.com");//封裝域名System.out.println(inetAddress3); } /192.168.31.1 localhost/127.0.0.1 DESKTOP-S6L70L0/192.168.31.188 www.baidu.com/182.61.200.7套接字
V1 :客戶端單向通信到服務端
服務端
public static void main(String[] args) throws IOException {// 1、創建套接字:指定服務器端口號ServerSocket serverSocket = new ServerSocket(8888);//2、等待客戶端發來的消息Socket socket = serverSocket.accept();//接收到client的流InputStream inputStream = socket.getInputStream();DataInputStream dataInputStream = new DataInputStream(inputStream);//3、接收客戶端發來的數據String str = dataInputStream.readUTF();System.out.println("客戶端發來信息 :"+str);//4、關閉流,關閉網絡資源dataInputStream.close();inputStream.close();socket.close();serverSocket.close();}客戶端
public static void main(String[] args) throws IOException {//1、創建套接字客戶端,指定服務器的ip和端口Socket socket = new Socket("127.0.0.1", 8888);//2利用輸出流發送數據OutputStream outputStream = socket.getOutputStream();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF("hello");//關閉流,關閉網絡資源dataOutputStream.close();outputStream.close();socket.close();}V2?:客戶端、服務端雙向通信
服務端
public static void main(String[] args) throws IOException {// 1、創建套接字:指定服務器端口號ServerSocket serverSocket = new ServerSocket(8888);//2、等待客戶端發來的消息Socket socket = serverSocket.accept();//接收到client的流InputStream inputStream = socket.getInputStream();DataInputStream dataInputStream = new DataInputStream(inputStream);//3、接收客戶端發來的數據String str = dataInputStream.readUTF();System.out.println("客戶端發來信息 :"+str);//4、向客戶端發送一個信息OutputStream outputStream = socket.getOutputStream();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF("response");// 關閉流,關閉資源dataOutputStream.close();outputStream.close();dataInputStream.close();inputStream.close();socket.close();serverSocket.close();} public static void main(String[] args) throws IOException {//1、創建套接字客戶端,指定服務器的ip和端口Socket socket = new Socket("127.0.0.1", 8888);//2利用輸出流發送數據OutputStream outputStream = socket.getOutputStream();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF("request");//接收服務端的數據InputStream inputStream = socket.getInputStream();DataInputStream dataInputStream = new DataInputStream(inputStream);String response = dataInputStream.readUTF();System.out.println("服務端響應:"+response);//關閉流,關閉網絡資源dataInputStream.close();inputStream.close();dataOutputStream.close();outputStream.close();socket.close();}客戶端
public static void main(String[] args) throws IOException {// 1、創建套接字:指定服務器端口號ServerSocket serverSocket = new ServerSocket(8888);//2、等待客戶端發來的消息Socket socket = serverSocket.accept();//接收到client的流InputStream inputStream = socket.getInputStream();DataInputStream dataInputStream = new DataInputStream(inputStream);//3、接收客戶端發來的數據String str = dataInputStream.readUTF();System.out.println("客戶端發來信息 :"+str);//4、向客戶端發送一個信息OutputStream outputStream = socket.getOutputStream();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF("response");// 關閉流,關閉資源dataOutputStream.close();outputStream.close();dataInputStream.close();inputStream.close();socket.close();serverSocket.close();}V3:客戶端向服務發送對象
服務端
public static void main(String[] args) throws IOException, ClassNotFoundException {// 1、創建套接字:指定服務器端口號ServerSocket serverSocket = new ServerSocket(8888);//2、等待客戶端發來的消息Socket socket = serverSocket.accept();//接收到client的流InputStream inputStream = socket.getInputStream();ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);Map map = (Map) objectInputStream.readObject();//3、接收客戶端發來的數據System.out.print("接收到客戶端發來的年級:"+map.get("grade")+",班級:"+map.get("class"));//4、向客戶端發送一個信息OutputStream outputStream = socket.getOutputStream();DataOutputStream dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF("response");// 關閉流,關閉資源dataOutputStream.close();outputStream.close();objectInputStream.close();inputStream.close();socket.close();serverSocket.close();}客戶端
public static void main(String[] args) throws IOException {//1、創建套接字客戶端,指定服務器的ip和端口Socket socket = new Socket("127.0.0.1", 8888);//2利用輸出流向服務端發送對象Map<String ,Object> map = new HashMap<>();Scanner scanner = new Scanner(System.in);System.out.print("請輸入你的年級:");String grade = scanner.next();System.out.print("請輸入你的班級:");String clazz = scanner.next();map.put("grade",grade);map.put("class",clazz);OutputStream outputStream = socket.getOutputStream();ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);objectOutputStream.writeObject(map);//接收服務端的數據InputStream inputStream = socket.getInputStream();DataInputStream dataInputStream = new DataInputStream(inputStream);String response = dataInputStream.readUTF();System.out.println("服務端響應:"+response);//關閉流,關閉網絡資源dataInputStream.close();inputStream.close();objectOutputStream.close();outputStream.close();socket.close();}V4:處理異常
服務端
public static void main(String[] args) {ServerSocket serverSocket = null;Socket socket = null;InputStream inputStream = null;ObjectInputStream objectInputStream = null;OutputStream outputStream = null;DataOutputStream dataOutputStream = null;try{// 1、創建套接字:指定服務器端口號serverSocket = new ServerSocket(8888);//2、等待客戶端發來的消息socket = serverSocket.accept();//接收到client的流inputStream = socket.getInputStream();objectInputStream = new ObjectInputStream(inputStream);Map map = (Map) objectInputStream.readObject();//3、接收客戶端發來的數據System.out.print("接收到客戶端發來的年級:"+map.get("grade")+",班級:"+map.get("class"));//4、向客戶端發送一個信息outputStream = socket.getOutputStream();dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF("response");}catch (Exception e){e.printStackTrace();}finally {// 關閉流,關閉資源try{if (dataOutputStream!=null) {dataOutputStream.close();}}catch (Exception e){e.printStackTrace();}try{if(outputStream!=null){outputStream.close();}}catch (Exception e){e.printStackTrace();}try{if (objectInputStream!=null) {objectInputStream.close();}}catch (Exception e){e.printStackTrace();}try{if(inputStream!=null) {inputStream.close();}}catch (Exception e){e.printStackTrace();}try{if(socket!=null){socket.close();}}catch (Exception e){e.printStackTrace();}try{if (serverSocket!=null) {serverSocket.close();}}catch (Exception e){e.printStackTrace();}}}?客戶端
public static void main(String[] args) throws IOException {Socket socket = null;OutputStream outputStream = null;InputStream inputStream = null;ObjectOutputStream objectOutputStream = null;DataInputStream dataInputStream = null;try{//1、創建套接字客戶端,指定服務器的ip和端口socket = new Socket("127.0.0.1", 8888);//2利用輸出流向服務端發送對象Map<String ,Object> map = new HashMap<>();Scanner scanner = new Scanner(System.in);System.out.print("請輸入你的年級:");String grade = scanner.next();System.out.print("請輸入你的班級:");String clazz = scanner.next();map.put("grade",grade);map.put("class",clazz);outputStream = socket.getOutputStream();objectOutputStream = new ObjectOutputStream(outputStream);objectOutputStream.writeObject(map);//接收服務端的數據inputStream = socket.getInputStream();dataInputStream = new DataInputStream(inputStream);String response = dataInputStream.readUTF();System.out.println("服務端響應:"+response);}catch (Exception e){}finally {//關閉流,關閉網絡資源try {if (dataInputStream!=null) {dataInputStream.close();}}catch (Exception e){e.printStackTrace();}try {if (inputStream!=null) {inputStream.close();}}catch (Exception e){e.printStackTrace();}try {if(objectOutputStream!=null){objectOutputStream.close();}}catch (Exception e){e.printStackTrace();}try {if (outputStream!=null) {outputStream.close();}}catch (Exception e){e.printStackTrace();}try {if (socket!=null) {socket.close();}}catch (Exception e){e.printStackTrace();}}}V5:服務端多線程處理多個客戶端
服務端
public static void main(String[] args) {ServerSocket serverSocket = null;Socket socket = null;InputStream inputStream = null;ObjectInputStream objectInputStream = null;OutputStream outputStream = null;DataOutputStream dataOutputStream = null;try{// 1、創建套接字:指定服務器端口號serverSocket = new ServerSocket(8888);//2、等待客戶端發來的消息int count = 0;while(true){socket = serverSocket.accept();new ServerThread(socket).start();count++;System.out.println("當前是第"+count+"個人訪問,IP是"+socket.getInetAddress());}}catch (Exception e){e.printStackTrace();}finally {// 關閉流,關閉資源try{if (dataOutputStream!=null) {dataOutputStream.close();}}catch (Exception e){e.printStackTrace();}try{if(outputStream!=null){outputStream.close();}}catch (Exception e){e.printStackTrace();}try{if (objectInputStream!=null) {objectInputStream.close();}}catch (Exception e){e.printStackTrace();}try{if(inputStream!=null) {inputStream.close();}}catch (Exception e){e.printStackTrace();}try{if(socket!=null){socket.close();}}catch (Exception e){e.printStackTrace();}try{if (serverSocket!=null) {serverSocket.close();}}catch (Exception e){e.printStackTrace();}}} public class ServerThread extends Thread{InputStream inputStream = null;ObjectInputStream objectInputStream = null;OutputStream outputStream = null;DataOutputStream dataOutputStream = null;Socket socket = null;public ServerThread(Socket socket){this.socket = socket;}@Overridepublic void run() {try {//接收到client的流inputStream = socket.getInputStream();objectInputStream = new ObjectInputStream(inputStream);Map map = (Map) objectInputStream.readObject();//接收客戶端發來的數據System.out.println("接收到客戶端發來的年級:"+map.get("grade")+",班級:"+map.get("class"));//向客戶端發送一個信息outputStream = socket.getOutputStream();dataOutputStream = new DataOutputStream(outputStream);dataOutputStream.writeUTF("response");}catch (Exception e){e.printStackTrace();}finally {// 關閉流,關閉資源try{if (dataOutputStream!=null) {dataOutputStream.close();}}catch (Exception e){e.printStackTrace();}try{if(outputStream!=null){outputStream.close();}}catch (Exception e){e.printStackTrace();}try{if (objectInputStream!=null) {objectInputStream.close();}}catch (Exception e){e.printStackTrace();}try{if(inputStream!=null) {inputStream.close();}}catch (Exception e){e.printStackTrace();}}} }總結
以上是生活随笔為你收集整理的马士兵学习笔记-Java基础网络编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二. 应用加速(微服务架构设计的cdn访
- 下一篇: 安卓 输入法出现导致布局变形问题解决