第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

TCP 套接字客戶端/服務器 - 服務器僅響應來自客戶端的第一個連接

TCP 套接字客戶端/服務器 - 服務器僅響應來自客戶端的第一個連接

白板的微信 2021-12-01 15:04:58
我有一些簡單的客戶端和服務器代碼,客戶端向服務器發(fā)送一些字節(jié),服務器用一些字節(jié)響應。客戶端打印接收到的字節(jié),然后關(guān)閉套接字。這在客戶端第一次運行時工作正常,但隨后的調(diào)用沒有響應。package sockets.com;// Client Sideimport java.io.*;import java.net.*;public class ClientSideTCPSocket {    public void run() {        try {            int serverPort = 4023;            InetAddress host = InetAddress.getByName("localhost");            System.out.println("Connecting to server on port " + serverPort);            Socket socket = new Socket(host, serverPort);            System.out.println("Just connected to " + socket.getRemoteSocketAddress());            OutputStream out = socket.getOutputStream();            InputStream in = socket.getInputStream();            String s = "HELLO SERVER";            byte[] bytes = s.getBytes("US-ASCII");            for (byte b : bytes) {                out.write(b);            }            int ch = 0;            while ((ch = in.read()) >= 0) {                System.out.println("Got byte " + ch);            }            out.flush();            out.close();            socket.close();        } catch (UnknownHostException ex) {            ex.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        ClientSideTCPSocket client = new ClientSideTCPSocket();        client.run();    }}
查看完整描述

1 回答

?
慕慕森

TA貢獻1856條經(jīng)驗 獲得超17個贊

一些東西:


這段代碼將永遠循環(huán),直到客戶端關(guān)閉連接:


            while ((ch = server.getInputStream().read()) >= 0) {


                System.out.println("Got byte " + ch);

            }

然后在客戶端關(guān)閉他的連接后,后續(xù)嘗試向套接字發(fā)送“HELLO CLIENT”將產(chǎn)生一個 IO 異常。這將觸發(fā)您的服務器循環(huán)退出。


簡單的解決方法是調(diào)整您的協(xié)議,以便在某些標記字符上完成“消息”。在我的簡單修復中,我只是將其調(diào)整為!在收到a 時爆發(fā)。


最好讓每個客戶端會話在 ioexception 而不是整個服務器塊上終止。我對你的代碼的重構(gòu):


public class ServerSideTCPSocket {


    public void tryCloseSocketConnection(Socket socket) {

        try {

            socket.close();

        }

        catch(java.io.IOException ex) {

        }

    }


    public void processClientConnection (Socket clientConnection) throws java.io.IOException {


        int ch = 0;

        while ((ch = clientConnection.getInputStream().read()) >= 0) {


            System.out.println("Got byte " + ch);

            if (ch == '!') {

                break;

            }

        }

        // Write to output stream


        OutputStream out = clientConnection.getOutputStream();


        String s = "HELLO CLIENT!";

        byte[] bytes = s.getBytes("US-ASCII");


        for (byte b : bytes) {

            System.out.println(b);

            out.write(b);

        }

    }


    public void run() {

        try {

            int serverPort = 4023;

            ServerSocket serverSocket = new ServerSocket(serverPort);

            serverSocket.setSoTimeout(900000);

            while (true) {

                System.out.println("Waiting for client on port " + serverSocket.getLocalPort() + "...");


                Socket clientConnection = serverSocket.accept();


                try {

                    System.out.println("Just connected to " + clientConnection.getRemoteSocketAddress());

                    processClientConnection(clientConnection);

                }

                catch (java.io.IOException ex) {

                    System.out.println("Socket connection error - terminating connection");

                }

                finally {

                    tryCloseSocketConnection(clientConnection);

                }

            }

        }

        catch (IOException e) {

            e.printStackTrace();

        }

    }


    public static void main(String[] args) {

        ServerSideTCPSocket srv = new ServerSideTCPSocket();

        srv.run();

    }

}

然后將您的客戶端代碼的消息調(diào)整為:


        String s = "HELLO SERVER!";  // the exclamation point indicates "end of message".



查看完整回答
反對 回復 2021-12-01
  • 1 回答
  • 0 關(guān)注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號