使用Java編寫簡(jiǎn)單Socket客戶端和服務(wù)端

簡(jiǎn)介

某同事要用Socket連接外圍系統(tǒng),幫忙寫了個(gè)簡(jiǎn)單的Demo。
包含一個(gè)客戶端和一個(gè)服務(wù)端的,僅是示例,比較簡(jiǎn)陋,服務(wù)端也沒有用多線程。
直接貼代碼了。

服務(wù)端

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

/**
 * Socket服務(wù)端示例
 */
public class SocketServer {
    ServerSocket serverSocket;
    Socket connection = null;
    ObjectOutputStream out;
    ObjectInputStream in;
    String message;

    void runServer() {
        try {
            // 創(chuàng)建服務(wù)端監(jiān)聽
            serverSocket = new ServerSocket(31313, 10);

            // 等待客戶端連接
            System.out.println("等待客戶端連接...");
            connection = serverSocket.accept();
            System.out.println("收到客戶端連接: " + connection.getInetAddress().getHostName());

            // 獲取輸入輸出流
            out = new ObjectOutputStream(connection.getOutputStream());
            out.flush();
            in = new ObjectInputStream(connection.getInputStream());

            // 連接成功后,首先向客戶端發(fā)成功消息
            sendMsg("連接成功");

            // 發(fā)送接收消息
            do {
                try {
                    message = (String) in.readObject();
                    System.out.println("client>" + message);

                    // 發(fā)送退出消息
                    if (message.equals("bye")) {
                        sendMsg("bye");
                    }
                } catch (ClassNotFoundException ex) {
                    ex.printStackTrace();
                    System.err.println("數(shù)據(jù)格式無(wú)效");
                }
            } while (!message.equals("bye"));  //當(dāng)對(duì)方消息為bye時(shí)退出循環(huán)
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            // 關(guān)閉Socket連接
            try {
                in.close();
                out.close();
                serverSocket.close();
            } catch (IOException ioException) {
                ioException.printStackTrace();
            }
        }
    }

    void sendMsg(String msg) {
        try {
            out.writeObject(msg);
            out.flush();
            System.out.println("server>" + msg);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String args[]) {
        SocketServer server = new SocketServer();
        while (true) {
            server.runServer();
        }
    }
}

客戶端

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

/**
 * Socket客戶端示例
 */
public class SocketClient {
    Socket clientSocket;
    ObjectOutputStream out;
    ObjectInputStream in;
    String message;

    void runClient() {
        try {
            // 連接到服務(wù)端
            clientSocket = new Socket("localhost", 31313);
            System.out.println("已連接到服務(wù)端");

            // 獲取輸入輸出流
            out = new ObjectOutputStream(clientSocket.getOutputStream());
            out.flush();
            in = new ObjectInputStream(clientSocket.getInputStream());

            // 發(fā)送接收消息
            do {
                try {
                    // 接收消息
                    message = (String) in.readObject();
                    System.out.println("server>" + message);

                    // 發(fā)送消息
                    sendMsg("hello");
                    sendMsg("hello again");

                    // 發(fā)送退出消息
                    message = "bye";
                    sendMsg(message);
                } catch (ClassNotFoundException ex) {
                    ex.printStackTrace();
                    System.err.println("數(shù)據(jù)格式無(wú)效");
                }
            } while (!message.equals("bye")); //當(dāng)對(duì)方消息為bye時(shí)退出循環(huán)
        } catch (UnknownHostException ex) {
            ex.printStackTrace();
            System.err.println("無(wú)法連接到服務(wù)端");
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            // 關(guān)閉Socket連接
            try {
                in.close();
                out.close();
                clientSocket.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

    void sendMsg(String msg) {
        try {
            out.writeObject(msg);
            out.flush();
            System.out.println("client>" + msg);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String args[]) {
        SocketClient client = new SocketClient();
        client.runClient();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,941評(píng)論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,540評(píng)論 19 139
  • 年齡越大越明白,人生不可能事事順心,處處完美,凡事沒必要那么較真,人生難得糊涂。 越來(lái)越明白,內(nèi)心的不快樂(lè),是源于...
    盜夢(mèng)筆記閱讀 638評(píng)論 4 12
  • 有誰(shuí)在意過(guò)一片雪花的空靈, 清淡暈染化作一幅水墨丹青。 誰(shuí)能將千年的孤獨(dú)暴露于天高日精, 感受下一刻徹骨的絲絲涼陰...
    change_mds閱讀 288評(píng)論 10 9
  • 以前從來(lái)不總結(jié),也沒覺得有什么缺失,而且時(shí)間過(guò)去了,也不會(huì)再回來(lái),做出來(lái)的總結(jié)也是掛念那些已經(jīng)發(fā)生的不能改變的...
    涼快貓閱讀 350評(píng)論 0 1

友情鏈接更多精彩內(nèi)容