多客户机服务器,其中一个客户机只能向服务器发送消息,但向java中的所有客户机发送服务器消息
我希望服务器发送的消息应该传递给所有的客户端,但是客户端发送的消息应该只传递给服务器 问题是当我运行代码时- 1.服务器等待客户端连接 2.当多个客户端连接时 3.现在,当服务器广播第一条消息时,它会被两个客户端接收,但当服务器广播第二条消息时。两个客户端都必须发送消息才能接收服务器消息。 我是socket编程的新手,请纠正我的错误?多客户机服务器,其中一个客户机只能向服务器发送消息,但向java中的所有客户机发送服务器消息,java,sockets,Java,Sockets,我希望服务器发送的消息应该传递给所有的客户端,但是客户端发送的消息应该只传递给服务器 问题是当我运行代码时- 1.服务器等待客户端连接 2.当多个客户端连接时 3.现在,当服务器广播第一条消息时,它会被两个客户端接收,但当服务器广播第二条消息时。两个客户端都必须发送消息才能接收服务器消息。 我是socket编程的新手,请纠正我的错误? 到目前为止,我已经制作了这个程序 服务器代码: import java.util.ArrayList; import java.util.Iterator; im
到目前为止,我已经制作了这个程序 服务器代码:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Scanner;
import java.net.*;
import java.io.*;
public class Server_Side3
{
static Client_server t[] = new Client_server[10];
static LinkedList<Client_server> al = new LinkedList<Client_server>();
public static void main(String args[]) throws IOException
{
ServerSocket server = null ;
Socket socket = null;
try
{
int Port =9777;
server = new ServerSocket(Port);
System.out.println("Waiting for Client " + server);
while(true)
{
socket = server.accept();
System.out.println("Connected to " + socket.getLocalAddress().getHostAddress());
Client_server clients = new Client_server(socket);
al.add(clients);
clients.start();
}
}
catch (Exception e)
{
System.out.println("An error occured.");
e.printStackTrace();
}
try
{
server.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
private static class Client_server extends Thread
{
Socket sockets;
PrintWriter out;
Client_server t[];
Client_server (Socket s )
{
sockets = s;
}
public void run()
{
try
{
InetAddress localaddr = InetAddress.getLocalHost();
Scanner sc = new Scanner(System.in);
Scanner in = new Scanner(sockets.getInputStream());
out = new PrintWriter(sockets.getOutputStream(),true);
String input = null;
while(true)
{
String servermsg = sc.nextLine();
broadcast(servermsg);
System.out.println("Message sent to client: "+servermsg);
input = in.nextLine();
System.out.println(localaddr.getHostName()+" Said :"+ input);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
private void broadcast(String servermsg)
{
Iterator it = al.iterator();
while(it.hasNext())
{
((Client_server) it.next()).send(servermsg);
}
}
private void send(String msg)
{
String servrmsg = msg;
out.println(msg);
out.flush();
}
}
}
多播是您正在寻找的。。我不能使用tcp执行它吗?有必要使用数据报吗?UDP不可靠(数据包丢失),tcp是确保消息按顺序发送的方法。
import java.net.Socket;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class ClientSide2
{
static Scanner chat = new Scanner(System.in);
public static void main(String[] args)
{
int Port = 9777;
String Host = "localhost";
try
{
Socket socket = new Socket(Host, Port);
System.out.println("You connected to "+ Host);
Scanner in = new Scanner(socket.getInputStream()); //GET THE CLIENTS INPUT STREAM
PrintWriter out = new PrintWriter(socket.getOutputStream());
String clientinput;
while(true)
{
System.out.println(in.nextLine());//If server has sent us something .Print it
clientinput=chat.nextLine();
out.println(clientinput); //SEND IT TO THE SERVER
out.flush();
}
}
catch (Exception e)
{
System.out.println("The server might not be up at this time.");
System.out.println("Please try again later.");
}
}
}