【问题标题】:Java Sockets - A Client that reads the data the server getsJava Sockets - 读取服务器获取的数据的客户端
【发布时间】:2026-02-03 21:45:01
【问题描述】:

我正在开发一个 java 套接字程序,并且与客户端部分存在争议。服务器获取所有客户端写入的内容,但客户端仅获取其写入的内容。有人可以为我提供一个程序的客户端部分的示例,该程序可以获取所有客户端编写的内容吗?谢谢!

【问题讨论】:

  • 请阅读All About Sockets
  • 您必须让服务器从一个客户端读取消息,然后将其写入每个客户端。或者您可以查看 Java 消息服务。
  • 你的意思是像JDK自带的sockets demo吗?或者你可以搜索的socket教程? ;)

标签: java sockets client


【解决方案1】:

这是一个“回显服务器”示例

import java.io.*;
import java.net.*;

class TCPServer
{
public static void main(String argv[]) throws IOException
{
    ServerSocket serverSocket = null;
    DataInputStream serverInput = null;
    PrintStream serverOutput = null;
    String line = null;
    Socket clientSocket = null;

    // create server socket
    try
    {
        serverSocket = new ServerSocket(2012);
        clientSocket = serverSocket.accept();
        serverInput = new DataInputStream(clientSocket.getInputStream());
        serverOutput = new PrintStream(clientSocket.getOutputStream());
    }
    catch(IOException e){System.out.println(e);}


    // receive data and send it back to the client
    try
    {
        while(true)
        {
            line = serverInput.readLine();
            if(line.equals("exit"))
            {
                break;
            }
            else
            {
                if(!line.equals(null) && !line.equals("exit"))
                {
                    System.out.println("Received " +line);
                    line = line+" MODIFIED";
                    serverOutput.println(line);
                }
            }
        }
    }
    catch(IOException e){System.out.println("SERVER SIDE: Unable send/receive data");}

    try
    {
        serverInput.close();
        serverOutput.close();
        clientSocket.close();
        serverSocket.close();
    }
    catch(IOException e){System.out.println(e);}
}
}

这里是客户端

import java.io.*;
import java.net.*;

public class TCPClient
{
public static void main(String[] args) throws IOException 
{

    Socket echoSocket = null;
    PrintWriter out = null;
    BufferedReader in = null;

    try {
        echoSocket = new Socket("localhost", 2012);
        out = new PrintWriter(echoSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
    } catch (UnknownHostException e) {
        System.err.println("Don't know about host");
        System.exit(1);
    } catch (IOException e) {
        System.err.println("Couldn't get I/O");
        System.exit(1);
    }

BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;

while ((userInput = stdIn.readLine()) != null) {
    out.println(userInput);
    System.out.println("echo: " + in.readLine());
    if(userInput.equals("exit"))
    break;
}

out.close();
in.close();
stdIn.close();
echoSocket.close();
}
}

【讨论】:

  • 看起来有点像oracle的例子
  • @user1832583 可能是。我已经很久没有看过那个代码了。它永远是我机器上的一个文件。虽然我可能稍微调整了一下
  • 好的,看起来不错!我要测试datainputstream部分,剩下的我有!