简体   繁体   English

使用Java将套接字消息打印到控制台

[英]Print Socket Messages to Console in java

  1. I am beginner to java and learning Socket Programming.I am using the basic chat server socket communication. 我是Java的初学者,正在学习Socket编程。我正在使用基本的聊天服务器套接字通信。 I am having difficulty to print the server and client messages to the console window. 我在将服务器和客户端消息打印到控制台窗口时遇到困难。

  2. I would also implement this concept when i design my chat Server window UI and will update the char server intercommunication messages to my UI. 在设计聊天服务器窗口UI时,我也将实现此概念,并将char服务器互通消息更新到UI。 I would like to know as how can I achieve that ? 我想知道如何实现?

Code for 1 代码1
Server.java Server.java

package ChApp;

import java.io.IOException;
import java.net.*;
public class Server  {
    public static void main(String[] args) throws Exception {
        Socket s;
        ServerSocket server = new ServerSocket(3900);
        while(true)
        {

        s = server.accept();
        ServerHandl handle1 = new ServerHandl(s);
        Thread t1= new Thread(handle1);
        t1.start();
        System.out.println("Connection Succesful...");
        server.close();
        }
    }

}

Serverhandl.java Serverhandl.java

package ChApp;
import java.io.*;
import java.net.*;

public class ServerHandl implements Runnable {
    Socket s= null;
    BufferedReader read;
    PrintWriter write;
    String msg="Server is sending a sample msg";
        public ServerHandl(Socket s)
    {
        this.s = s;

    }
    public void run()
    {

        try {
            write = new PrintWriter(s.getOutputStream());
            write.println(msg);
            read = new BufferedReader(new InputStreamReader(s.getInputStream()));
            System.out.println(read.readLine());


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally{

            try {
                read.close();
                write.close();
                s.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }


}

Client.java Client.java

package ChApp;
import java.io.*;
import java.net.*;
import java.util.Scanner;

public class Client {

    public static void main(String[] args) throws IOException {
        Socket s= null;
        BufferedReader read;
        PrintWriter write = null;
        String h;
        StringBuilder sb = new StringBuilder();
        String sendmsg="Reply from client";
        s= new Socket("localhost",3900);
        read = new BufferedReader(new InputStreamReader(s.getInputStream()));
        while((h=read.readLine())!=null)
        {

            sb.append(h);

        }
        write = new PrintWriter(s.getOutputStream(),true);
        write.write(sendmsg);
        write.flush();
        s.close();
        read.close();
        write.close();

    }

}

Your client is calling readLine() until it returns null, but your server is reading from the connection so it hasn't closed it yet, so the null will never arrive, so you're deadlocked. 您的客户端一直在调用readLine(),直到它返回null为止,但是您的服务器正在从连接中读取数据,因此它尚未关闭它,因此null永远不会到达,因此您陷入了僵局。

Read one line from the server and then send a response, then close the socket. 从服务器读取一行 ,然后发送一个响应,然后关闭插座。 Have the server close the socket after it calls readLine(). 调用readLine()之后,让服务器关闭套接字。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM