Java --socket雙向通訊

以下例子實現了利用socket簡易雙向通訊的例子java

1.創建兩個java project,目錄以下
服務器

2.客戶端代碼socket

package client;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
    
    public static void main(String args[])
    {
        try{
            //建立客戶端套接字
            Socket socket = new Socket("127.0.0.1", 9999);
            //獲取套接字輸入流
            InputStream is = socket.getInputStream();
            DataInputStream dis = new DataInputStream(is);
            //獲取套接字輸出流
            OutputStream os = socket.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);
            
            //從鍵盤輸入
            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(isr);
            
            //聊天
            String message;
            while (true) {
                //讀取鍵盤輸入的字符,寫到客戶端輸出流
                message = br.readLine();
                dos.writeUTF(message);
                if(message.equals("88"))
                    break;
                //讀取服務器端的數據並打印到屏幕上
                message = dis.readUTF();
                System.out.println("服務器傳回的消息:"+message);
            }
            //關閉流
            dis.close();
            dos.close();
            socket.close();
            
        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }

}

3.服務器端代碼.net

package server;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String args[])
    {
        try {
            //建立一個ServerSocket,在端口號9999上監聽客戶端請求
            ServerSocket serverSocket = new ServerSocket(9999);
            Socket socket = serverSocket.accept();
            
            //獲取客戶端套接字的輸出流
            OutputStream os = socket.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);
            
            //獲取客戶端輸入流
            InputStream is = socket.getInputStream();
            DataInputStream dis = new DataInputStream(is);
            
            //建立字符輸入流接受鍵盤輸入
            InputStreamReader isr= new InputStreamReader(System.in);
            BufferedReader br= new BufferedReader(isr); 
            
            //消息
            String message;
            while (true) {
                //獲取客戶端輸入流
                message = dis.readUTF();
                System.out.println("客戶端發過來消息:"+message);
                if(message.equals("88"))
                    break;
                //讀取鍵盤輸入並寫入到輸出流
                message = br.readLine();
                dos.writeUTF(message);
            }
            
            dis.close();
            dos.close();
            serverSocket.close();
            socket.close();

        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        
    }
}

4.調試調試

1>服務器端項目 Run as-->Java Application,能夠打個log看下啓動成功。code

2>客戶端項目 Run as-->Java Application,能夠打個log看下啓動成功。客戶端運行起來後會覆蓋服務端的log。server

3>先將控制權調到客戶端這邊,即用鼠標點擊客戶端main方法,在控制檯(console)裏面輸入客戶端須要發送的消息,回車鍵便可發送。get

此時控制檯會輸出消息客戶端發過來消息:xxxxxxx(這是你本身輸入的消息)it

4>將控制權調到服務器這邊,即用鼠標點擊服務器端main方法,在控制檯(console)裏面輸入服務器端須要發送的消息,回車鍵便可發送。io

以下是調試截圖

4.1 客戶端輸入,還未回車

4.2 客戶端點擊了回車鍵,服務器端收到的消息

4.3 接着,服務器端回消息


4.4 客戶端再發消息



至此,完成了簡單的即時通信。

相關文章
相關標籤/搜索