繁体   English   中英

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

[英]Print Socket Messages to Console in java

  1. 我是Java的初学者,正在学习Socket编程。我正在使用基本的聊天服务器套接字通信。 我在将服务器和客户端消息打印到控制台窗口时遇到困难。

  2. 在设计聊天服务器窗口UI时,我也将实现此概念,并将char服务器互通消息更新到UI。 我想知道如何实现?

代码1
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

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

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();

    }

}

您的客户端一直在调用readLine(),直到它返回null为止,但是您的服务器正在从连接中读取数据,因此它尚未关闭它,因此null永远不会到达,因此您陷入了僵局。

从服务器读取一行 ,然后发送一个响应,然后关闭插座。 调用readLine()之后,让服务器关闭套接字。

暂无
暂无

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

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