分佈式服務器客戶端實驗

 

服務器端Socket程序

package com.aaa.servet;

 

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.ServerSocket;//導入java.net包,用於網絡通訊

import java.net.Socket;

 

public class ServetSocketTest {

public static void main(String[] args) {

System.out.println("...啓動服務器...");

//1.初始化服務端Socket並綁定端口爲8888

try {

ServerSocket serverSocket=new ServerSocket(8888);//需要添加try/catch塊

//2.等待客戶端的連接

Socket socket=serverSocket.accept();

//3.獲取輸入流,通過socket對象流,傳遞給緩衝字符流進行讀取;

BufferedReader bufferReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));

//4.讀取一行數據;

String str=bufferReader.readLine();

//5.輸出打印

System.out.println(str);

} catch (IOException e) {

e.printStackTrace();

}

}

}

  1. 客戶端程度代碼

package com.aaa.clicent;

 

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.net.Socket;

import java.net.UnknownHostException;

 

public class ClientSocket {

public static void main(String[] args) {

//1.創建socket對象,建立到服務i端的連接;

try {

Socket socket=new Socket("127.0.0.1",8888);

//2.通過緩衝輸出流,包裝下socket對象的輸出字節流,進行寫操作;

BufferedWriter bufferWriter=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

//3.構造字符串,寫進去

String str="你是我的小心肝";

bufferWriter.write(str);

//3.2還需要將緩衝中的內容放到socket

bufferWriter.flush();

//4.注意一定要有關閉連接;

socket.shutdownOutput();

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

 

}

}

  1. 案例效果:
  2.  

 

5.現在需要繼續升級,如何循環!!!可以多個循環;

服務器端修改爲:

客戶端修改爲:

 

--------UDP Socket連接---

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class UDPServer {
    public static void main(String[] args) {
        //1.創建服務器端的DatagramSocket數據包,
        try {
            DatagramSocket datagramSocket=new DatagramSocket(8800);
            //2.創建數據報,用於接受用戶傳送過來的數據;存放於字節數組;
            byte[]bytes=new byte[1024];
            DatagramPacket datagramPacket=new DatagramPacket(bytes,bytes.length);
            System.out.println("*****服務器端已經啓動****");
            //使用receive方法接受;
            datagramSocket.receive(datagramPacket);
            //4.讀取數據;
            String info=new String(bytes,0,datagramPacket.getLength());
            //5.輸出信息;
            System.out.println("服務器,客戶端信息爲:"+info);
            //升級,服務器端響應客戶端;
            InetAddress address=datagramPacket.getAddress();
            int port=datagramPacket.getPort();
            byte[]sinfo="歡迎您".getBytes();
            //升級2.創建數據報,包含socket信息;
            DatagramPacket packet=new DatagramPacket(sinfo,sinfo.length,address,port);
            // 升級3;
            datagramSocket.send(packet);
            //關閉資源;
            datagramSocket.close();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

==客戶端

import java.io.IOException;
import java.net.*;

public class UDPClient {
    public static void main(String[] args) {
        //1.定義服務器的地址、端口號、數據;
        try {
            InetAddress address=InetAddress.getByName("localhost");
            int port=8800;
            byte[]data="用戶名:admin,密碼:123".getBytes();
            //2.創建數據報,包含發送的數據信息,可以使用帶有4個參數的方法;
            DatagramPacket datagramPacket=new DatagramPacket(data,data.length,address,port);
            //3.創建DatagramSocket對象;
            DatagramSocket datagramSocket=new DatagramSocket();
            //4.向服務器發送數據;
            datagramSocket.send(datagramPacket);
            ////升級
            byte[]data2=new byte[1024];
            DatagramPacket packet2=new DatagramPacket(data2,data2.length);
            //2.接受服務器響應的數據 ;
            datagramSocket.receive(packet2);
            //3.讀取數據;
            String reply=new String(data2,0,packet2.getLength());
            System.out.println("我是客戶端,服務器端說:"+reply);
            //4.關閉資源;
            datagramSocket.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章