千家信息网

Java Socket客服端第二次传送信息时服务端收不到消息怎么解决

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,这篇文章主要讲解了"Java Socket客服端第二次传送信息时服务端收不到消息怎么解决",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java Soc
千家信息网最后更新 2024年11月23日Java Socket客服端第二次传送信息时服务端收不到消息怎么解决

这篇文章主要讲解了"Java Socket客服端第二次传送信息时服务端收不到消息怎么解决",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java Socket客服端第二次传送信息时服务端收不到消息怎么解决"吧!

小问题一:

在客户端使用如下代码时候,服务端接收不到客户端信息。

PrintWriter pw = new PrintWriter(new BufferedOutputStream(os));pw.print("this is a clent:"+i);pw.flush();

此时,我把代码改成如下,服务端可以看到客户端发送的信息。

os = socket.getOutputStream();PrintWriter pw = new PrintWriter(new BufferedOutputStream(os));pw.print("this is a clent:"+i+"\n");// 或者换成 pw.println("this is a clent:"+i);pw.flush();

这两段代码的区别是,一个代码没有加换行符,而另一个代码加了换行符。

小问题二:

在服务端开启后,客户端执行完创建Socket代码之后,将不会在进行代码的连接检查,这样带来了一个后果,当代码执行如下代码之后,关闭服务端的连接,并不能出现Connection refused (Connection refused)提示。

socket = new Socket("127.0.0.1", 10000);

下面贴出完整代码:

客户端:

public static void main(String[] args) {        Socket socket = null;        OutputStream os = null;        try {int i=0;            socket = new Socket("127.0.0.1", 10000);            while (true) {                i++;                os = socket.getOutputStream();                PrintWriter pw = new PrintWriter(new BufferedOutputStream(os));                Thread.sleep(1000L);                pw.print("this is a clent:"+i+"\n");                pw.flush();                //接收服务器传输过来的信息                InputStream is = socket.getInputStream();                BufferedReader br = new BufferedReader(new InputStreamReader(new BufferedInputStream(is)));                System.out.println("服务器传输信息:"/* + br.readLine()*/+ ";服务器信息:" + socket.getInetAddress().getHostName());            }        } catch (IOException | InterruptedException e) {            e.printStackTrace();        } finally {try {                os.close();                socket.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}

服务端:

public static void main(String[] args) {try {        ServerSocket serverSocket = new ServerSocket(10000);        Socket socket = null;        InputStream inputStream = null;        while (true) {            socket = serverSocket.accept();            inputStream = socket.getInputStream();            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));            System.out.println("服务端收到客户端消息:" + bufferedReader.readLine() + ";客户端信息" + socket.getInetAddress().getHostAddress() + ":" + socket.getPort());            //反馈消息            OutputStream os = socket.getOutputStream();            PrintWriter pw = new PrintWriter(new OutputStreamWriter(new BufferedOutputStream(os)));            pw.println("收到客户端传输数据,服务器信息" + socket.getLocalSocketAddress().toString());            pw.flush();        }    } catch (IOException e) {        e.printStackTrace();    }}

感谢各位的阅读,以上就是"Java Socket客服端第二次传送信息时服务端收不到消息怎么解决"的内容了,经过本文的学习后,相信大家对Java Socket客服端第二次传送信息时服务端收不到消息怎么解决这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0