繁体   English   中英

Java客户端套接字:无法从服务器接收消息到客户端

[英]Java client-socket:Cannot receive messages from server to client

所以这个问题现在已经让我头疼了几天。我正在制作一个多用户聊天应用程序。我的设计如下:1.有一个登录窗口。 2.输入详细信息后,客户端聊天窗口将打开。 3.现在用户开始输入。 4.一旦他按下回车键或单击发送按钮,该消息就会发送到服务器。 5,服务器将其发送给所有客户端,包括向其发送原始消息的客户端。

问题:我无法从服务器接收到客户端的任何消息。

这是我的服务器类:

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class Server implements Runnable {
static InetAddress address;
static ArrayList<Integer> clients=new ArrayList<Integer>();
static ArrayList<Socket> socs=new ArrayList<>();
static String message="";
static DataOutputStream toClient;
static  ServerSocket socket;
static Socket socketNew;
static boolean running=false;
public static void main(String[] args) throws IOException
{
    socket=new ServerSocket(8000);
    System.out.println("Server started on port 8000");
    running=true;

    while(true)
    {   
        socketNew=socket.accept();
        socs.add(socketNew);
        address=socketNew.getInetAddress();

        System.out.println("connected to client at address: "+address);

        Server server=new Server();
        new Thread(server).start();


    }
}


public void run() {
    try {
        BufferedReader br = new BufferedReader(new InputStreamReader(socketNew.getInputStream()));
        String message;
        PrintWriter out;

        while ((message = br.readLine()) != null) {
            System.out.println(message);
            for (Socket s : socs) // sending the above msg. to all clients
            {
                out = new PrintWriter(s.getOutputStream(), true);
                out.write(message);
                out.flush();

            }


        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}

这是客户端类中的receive_message函数。请注意,此方法在一个单独的线程上运行,该线程在用户登录后立即启动。

public void receive_data()
{while(true)
{
try {
    BufferedReader in;
    in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    while(in.readLine()!=null)
    {
        System.out.println(in.readLine());
       console(in.readLine());
       }
   }
 catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
   }

  }
 }



}

有什么建议吗?谢谢您的时间。 :-)

您正在编写没有行尾的消息,而客户端正在等待readLine循环中的行尾字符。 通过在服务器的send循环中放置out.write('\\n') ,它还将发送换行符。

例:

for (Socket s : socs)  {
     out = new PrintWriter(s.getOutputStream(), true);
     out.write(message);
     out.write('\n'); // added this line
     out.flush();
}

暂无
暂无

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

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