1. 程式人生 > >基於TCP協議的Socket通訊 實現使用者登入 以及服務端的相應

基於TCP協議的Socket通訊 實現使用者登入 以及服務端的相應

服務端

package com.example;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
 * Created by ChenHe on 2016/10/28.
 * 基於TCP
協議的Socket通訊,實現使用者登入 * 服務端 */ public class Server { public static void main(String[] args){ try { //1.建立一個服務端Socket,即ServerSocket,指定繫結的埠,並且監聽埠 ServerSocket serverSocket = new ServerSocket(8888); //2.呼叫accept()方法開始監聽,等待客戶端的連線 System.out.println("***i am server let us begin***"); Socket socket = serverSocket.accept();
//3.獲取輸入流,並讀取客戶端資訊 InputStream is = socket.getInputStream();//位元組輸入流 InputStreamReader isr = new InputStreamReader(is);//將位元組流轉換為字元流 BufferedReader br = new BufferedReader(isr);//為字元流新增緩衝 String info = null; while ((info = br.readLine())!=null){//迴圈讀取客戶端的資訊 System.out.println("The client say"+info);
} socket.shutdownInput();//關閉輸入流 //4.獲取輸出流,相應客戶端的請求 OutputStream os = socket.getOutputStream(); PrintWriter pw = new PrintWriter(os);//包裝為列印流 pw.write("Welcome !!!"); pw.flush();//呼叫flush()方法將緩衝輸出 //5.關閉資源 pw.close(); os.close(); br.close(); isr.close(); is.close(); socket.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } }

伺服器列印資料

***i am server let us begin***
The client say錛�UserName: admin;PassWorld錛�123


Process finished with exit code 0

客戶端

package com.example;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
/**
 * Created by ChenHe on 2016/10/28
 * 客戶端.
 */
public class Client {

    public static void main(String[] args){

        try {
            //1.建立客戶端Socket,指定服務區地址和埠
Socket socket = new Socket("localhost",8888);
//2.獲取輸出流,向服務端傳送資訊
OutputStream os = socket.getOutputStream();//位元組輸出流
PrintWriter pw = new PrintWriter(os);//將輸出流包裝為列印流
pw.write("UserName: admin;PassWorld123");
pw.flush();//重新整理
socket.shutdownOutput();//關閉輸出流
//3.獲取輸入流,並讀取服務端的相應資訊
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String info = null;
            while ((info = br.readLine())!=null){
                System.out.println("i am client,server say:"+info);
}
            //4.關閉資源
br.close();
is.close();
pw.close();
os.close();
socket.close();
} catch (IOException e) {
            e.printStackTrace();
}
    }
}

客戶端列印資料

i am client,server say:Welcome !!!

實現多執行緒訪問 

package com.example;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
/**
 * Created by ChenHe on 2016/10/28.
 * 伺服器執行緒處理類
*/
public class ServerThread extends Thread {

    Socket socket = null;
    public ServerThread(Socket socket){
        this.socket = socket;
}

    //執行緒執行的操作,相應客戶端的請求
public void run(){
        InputStream is = null;//位元組輸入流
InputStreamReader isr = null;//將位元組流轉換為字元流
BufferedReader br = null;//為字元流新增緩衝
PrintWriter pw = null;
OutputStream os = null;
        try {
            //3.獲取輸入流,並讀取客戶端資訊
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
String info = null;
            while ((info = br.readLine())!=null){//迴圈讀取客戶端的資訊
System.out.println("The client say:"+info);
}


        socket.shutdownInput();//關閉輸入流
//4.獲取輸出流,相應客戶端的請求
os = socket.getOutputStream();
pw = new PrintWriter(os);
pw.write("Welcome !!!");
pw.flush();//呼叫flush()方法將緩衝輸出
} catch (IOException e) {
        e.printStackTrace();
}finally {
            //5.關閉資源
try {
                pw.close();
os.close();
br.close();
isr.close();
is.close();
socket.close();
} catch (IOException e) {
                e.printStackTrace();
}
        }

    }
}

服務端呼叫方法 

//迴圈監聽客戶端的連線
while (true) {
    //呼叫accept()方法開始監聽,等待客戶端的連線
socket = serverSocket.accept();
//建立一個新的執行緒
ServerThread serverThread = new ServerThread(socket);
//啟動執行緒
serverThread.start();
count++;
System.out.println("connect count:"+count);
InetAddress address = socket.getInetAddress();
System.out.println("ip:"+address);
}

相關推薦

no