1. 程式人生 > >Java網路簡單C/S程式設計

Java網路簡單C/S程式設計

1.伺服器例項化一個ServerSocket物件,指示通訊將產生在哪個埠號;

2.伺服器呼叫ServerSocket類的accept()方法.這個方法等待直到一個客戶端在給定的埠上連線到伺服器。

3.伺服器在等待後, 一個客戶端例項化一個Socket物件,指定伺服器名稱和連線的埠號;

4.Socket類的建構函式努力將客戶端連線到指定的伺服器和埠號。如果通訊建立,客戶端現在就擁有了一個能和伺服器通訊的Socket物件

5.在伺服器端,accept()方法子伺服器上返回一個連線到客戶端套接字的新的套接字。

在連線建立後,通訊可以使用I/O流產生。每個套接字都有一個輸出流和一個輸入流。客戶端的輸出流連線到伺服器端的輸入流,客戶端的輸入流連線到伺服器段的輸入流。

伺服器端

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class CS_Server {
    public static void main(String[] args){
        System.out.print("輸入埠號:");
        Scanner input = new Scanner(System.in);
        try{
            Thread t = new MyServer(input.nextInt());
            t.start();
        }catch
(Exception e){ e.printStackTrace(); } input.close(); } } class MyServer extends Thread{ private ServerSocket serverSocket; MyServer(int port) throws IOException{ //建立一個ServerSocket並繫結埠 serverSocket = new ServerSocket(port); //設定堵塞超時時間,不設定則認為一直堵塞,直到接受到客戶端連線
serverSocket.setSoTimeout(90000); } public void run(){ Socket client_socket; System.out.println("伺服器地址:"+serverSocket.getLocalSocketAddress().toString()); while(true){ try{ System.out.println("等待伺服器的埠"+serverSocket.getLocalPort()+"..."); //例項化一個Socket,並接受ServerSocket 從客戶端獲取的資訊 client_socket=serverSocket.accept(); System.out.println("正在連線 "+client_socket.getRemoteSocketAddress().toString()); //獲取輸入流物件 //輸入流物件 打包 成 資料輸入流物件 DataInputStream in=new DataInputStream(client_socket.getInputStream()); //輸入 System.out.println(in.readUTF()); //獲取輸出流物件 //輸出流物件 打包 到資料輸出流物件 DataOutputStream out = new DataOutputStream(client_socket.getOutputStream()); //輸出 out.writeUTF("Hello from "+client_socket.getLocalAddress()); client_socket.close(); }catch(IOException e){ System.out.println(e); } } } }

流程圖

這裡寫圖片描述

客戶端

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class CS_Client {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.print("輸入伺服器地址:");
        Scanner a = new Scanner(System.in);
        String serverAddress=a.nextLine();
        System.out.print("輸入伺服器埠:");
        int serverPort=a.nextInt();
        a.close();

        Socket client;
        try{
            //例項化Socket 並繫結伺服器地址及其埠
            client = new Socket(serverAddress,serverPort);
            System.out.println("連線到伺服器!");
            //Socket物件 獲取輸出流物件 並打包到 輸出流物件中
            //輸出流物件 打包 到 資料輸出流的物件中
            DataOutputStream out = new DataOutputStream(client.getOutputStream());
            //writeUTF 將內容已UTF8形式,通過管道,進行傳輸
            out.writeUTF("Hello from "+client.getLocalAddress().toString());
            // 獲取輸入流物件
            // 輸入流物件 打包到 資料輸入流物件中
            DataInputStream inputStream = new DataInputStream(client.getInputStream());
            //輸出 獲取的內容
            System.out.println("Server says:"+inputStream.readUTF());
            //關閉客戶端
            client.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }

}

流程圖
這裡寫圖片描述