gpt4 book ai didi

Java EchoTCPServer - 发送给所有客户端

转载 作者:可可西里 更新时间:2023-11-01 02:51:50 24 4
gpt4 key购买 nike

这是我的代码:

服务器:

package server;

public class Main {
public static void main(String args[]) {
new EchoServer(9000);
}
}

+

package server;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class EchoServer {
private ServerSocket server;

public EchoServer(int port) {
try {
server = new ServerSocket(port);

while (true) {
Socket socket = server.accept();

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

out.println(in.readLine() + " | MOD");

socket.close();
}
} catch(Exception err) {
err.printStackTrace();
}
}
}

客户:

package client;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Main {
public static void main(String args[]) {
try {
while (true) {
Socket socket = new Socket("localhost", 9000);

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

out.println(input.readLine());

System.out.println(in.readLine());

socket.close();
}
} catch (Exception err) {
System.out.println(err);
}
}
}

一切正常,除了我希望当服务器向客户端发送“消息”+“| MOD”时,我希望服务器将其发送给所有客户端,我该怎么做?

我是 Java 的新手,但不是编码的新手,所以如果我做错了一些可以更容易或更好地完成的事情,请帮助我。

请帮忙。

非常感谢。

最佳答案

您可以做的是将客户端套接字保存在一个数组中,然后使用 for 循环发送到每个套接字。

首先,声明你的clientSocket数组;请注意,5 只是用于测试的任意大小。另外,声明一个计数器 int。

public Socket clientSocket[] = new Socket[5];
public int intLastSocket = 0;

// this should be placed where you're waiting to accept connections
while (true) {
printTCP("Ready to accept welcome socket");

clientSocket[intLastSocket] = welcomeSocket.accept();

intLastSocket++;
}

// on the server, call this to send. s is a reference to the server object
public void sendToAllTCP(TCPServer s, String message) {
for (Socket z : s.clientSocket) {
if (z != null) {
PrintStream outToClient = null;
try {
outToClient = new PrintStream(z.getOutputStream());
outToClient.println(message);
} catch (IOException e) {
TCPServer.printTCP("Caught an IO exception trying "
+ "to send to TCP connections");
e.printStackTrace();
}
}
}
}

在您的代码中:

包 com.murplyx.server;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class EchoServer {
private ServerSocket server;
// use the clientSocket Array to save each new connection
public Socket clientSocket[] = new Socket[5];

public EchoServer(int port) {
try {
server = new ServerSocket(port);

// this should be placed where you're waiting to accept connections
while (true) {
System.out.println("Ready to accept welcome socket");

clientSocket[intLastSocket] = server.accept();

intLastSocket++;

//send your message here, note that putting
//it here will send it each time u add a new connection
sendToAllTCP(/*the message you want to send */);
}
} catch(Exception err) {
err.printStackTrace();
}
}

public void sendToAllTCP(String message) {
// this is an enchanced for loop, i don't know if it's in other languages
// but in java it's supposed to let you loop through
//each object in any iterable list
// such as array, arraylist, linkedlist, etc
for (Socket z : clientSocket) {
if (z != null) {
//basically this chunk of code declares output and input streams
//for each socket in your array of saved sockets
PrintStream outToClient = null;
try {
outToClient = new PrintStream(z.getOutputStream());
outToClient.println(message);
} catch (IOException e) {
System.out.println("Caught an IO exception trying "
+ "to send to TCP connections");
e.printStackTrace();
}
}
}
}
}

根据您想要发送消息的时间,您可以使用控制台和 sys.in 来发送它。例如,如果您从 sys.in 读取一行并且它是 .equals("sendMsg"),那么您可以调用 sendToAllTCP(yourmessage)

关于Java EchoTCPServer - 发送给所有客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27910285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com