简体   繁体   English

如何在Java套接字编程中用单个服务器创建多个客户端?

[英]how to create multiple clients with single server in java socket programming?

I am trying to follow the Java socket programming. 我正在尝试遵循Java套接字编程。 My goal is to create multiple client threads, which post their state and all those are listened by the same server. 我的目标是创建多个客户端线程,它们发布它们的状态,并且所有这些都由同一服务器侦听。

something like this 1. Server Started 2. Client A started 3. Client B started 4. Client A said "Hi" to Client B 5. Client B said "Hi" to Client A 6. Client A said "Hi2" to Client B 7. Client B said "Hi2" to Client A 8. Client A said "Hi3" to Client B 9. Client B said "Hi3" to Client A 10. Client A completed 11. Client B completed 类似于以下内容:1.服务器启动2.客户端A启动3.客户端B启动4.客户端A对客户端B说“嗨” 5.客户端B对客户端A说“嗨” 6.客户端A对客户端B说“ Hi2” 7.客户B对客户A说“ Hi2” 8.客户A对客户B说“ Hi3” 9.客户B对客户A说“ Hi3” 10.客户A完成11.客户B完成

what I have tried so far is : 到目前为止,我尝试过的是:

  1. MyServer.java MyServer.java
import java.net.*;
import java.io.*;

class MyServer
{
    public static void main(String args[]) throws Exception
    {
        ServerSocket server_socket = new ServerSocket(3333);
        Socket client_socket = server_socket.accept();
        DataInputStream din = new DataInputStream(client_socket.getInputStream());
        DataOutputStream dout = new DataOutputStream(client_socket.getOutputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str = "", str2 = "";
        int counter = 0;
        while (!str.equals("stop") && counter < 10)
        {
            str = din.readUTF();
            System.out.println("client says: " + str);
            //str2 = br.readLine();
            str2 = str +"server response ";
            dout.writeUTF(str2);
            dout.flush();
            counter ++;
        }

        din.close();
        client_socket.close();
        server_socket.close();
    }
}
  1. MyClient.java MyClient.java
import java.util.stream.IntStream;

public class ClientThread implements Runnable
{
String client_name;

public ClientThread(String client_name)
{
    this.setClient_name(client_name);
}

public void run()
{
    for(int i=0;i<5;i++)
    {
        System.out.println(this.getClient_name()+" : "+i);
        new ClientHelper().sendMessageToServer(this.getClient_name(),i);
        try
        {
            Thread.sleep(1000);
        } catch (InterruptedException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

public String getClient_name()
{
    return client_name;
}

private void setClient_name(String client_name)
{
    this.client_name = client_name;
}

} }

3 . 3。 ClientHelper.java ClientHelper.java

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;

public class ClientHelper
{
    Socket socket;
    DataInputStream din ;
    DataOutputStream dout ;

    public void sendMessageToServer(String player_name, int i)
    {
        try
        {
            socket = new Socket("localhost", 3333);
            din = new DataInputStream(this.getSocket().getInputStream());
            dout = new DataOutputStream(this.getSocket().getOutputStream());
            // BufferedReader br = new BufferedReader(new
            // InputStreamReader(System.in));
            dout.writeUTF(player_name + " : says hi :" + i);
            dout.flush();
            socket.close();
        } catch (UnknownHostException e )
        {
            e.printStackTrace();
        } catch (IOException e)
        {
            e.printStackTrace();
        } finally
        {
        }

    }

    private Socket getSocket()
    {
        return socket;
    }

    private void setSocket(Socket socket)
    {
        this.socket = socket;
    }
}
  1. App.java App.java
public class App 
{

    public static void main( String[] args )
    {
        new Thread(new ClientThread("A")).start();
        //new Thread(new ClientThread("B")).start();
        /*try
        {

            DataInputStream dataInputStream;
            DataOutputStream dataOutputStream;
            BufferedReader bufferedReader; 
            Socket socket = new Socket("localhost", 12345);
            dataInputStream = new DataInputStream(socket.getInputStream());
            dataOutputStream = new DataOutputStream(socket.getOutputStream());
            bufferedReader = new BufferedReader(new InputStreamReader(System.in));

            Player p1 = new Player("p1", dataInputStream, dataOutputStream, bufferedReader);
            Player p2 = new Player("p2", dataInputStream, dataOutputStream, bufferedReader);
            p1.move();
            p2.move();
        } catch (UnknownHostException e)
        {
            e.printStackTrace();
        } catch (IOException e)
        {
            e.printStackTrace();
        }*/

    }
}

It connects one client, but second client does not connect. 它连接一个客户端,但第二个客户端不连接。

Your MyServer is wrong. 您的MyServer错误。 It accepts just one client. 它仅接受一个客户。

    try (ServerSocket s = new ServerSocket(...);) {
        while (true) {
            Socket conn = s.accept();
            conn.getInetAddress().getHostName() + " : " + conn.getPort());
            new ServerConnection(conn).start();
        }
    }
    catch(IOException e) {
        e.printStackTrace();
    }

}

and for each client something like this 对于每个客户这样的事情

public class ServerConnection extends Thread {

    private Socket client_socket;

    public ServerConnection( Socket client_socket) {
        this.client_socket = client_socket;
    }

    public void run() {
        DataInputStream din = new DataInputStream(client_socket.getInputStream());
        DataOutputStream dout = new DataOutputStream(client_socket.getOutputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str = "", str2 = "";
        int counter = 0;
        while (!str.equals("stop") && counter < 10)
        {
            str = din.readUTF();
            System.out.println("client says: " + str);
            //str2 = br.readLine();
            str2 = str +"server response ";
            dout.writeUTF(str2);
            dout.flush();
            counter ++;
        }

        din.close();
    }
}

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

相关问题 使用一台服务器和多个客户端在 Java 套接字编程中创建会话 - Creating sessions in java socket programming with one server and multiple clients 我正在尝试在单个服务器和多个客户端中使用套接字编程开发聊天应用程序 - I am trying to develop a chat application using socket Programming in single server and multiple Clients Java套接字编程中将文件从多个客户端发送到单个服务器 - File sending from multiple client to Single server in Java Socket Programming 在 Java 中的套接字编程中从服务器向所有客户端发送数据 - Send data from server to all clients in socket programming in Java 如何为多个客户端创建套接字服务器 - how to make a socket server for multiple clients 如何创建一个侦听端口并接受多个客户端的Java服务器 - How to create a Java server which listens to a port and accepts multiple clients 服务器套接字和多个客户端可以在单个主机上运行吗? - Can Server Socket and multiple clients run on a single host? Java:如何在单个线程中与多个客户端进行通信 - Java: How to communicate with multiple clients in a single thread Java TCP 服务器套接字在不同端口上接受多个客户端 - Java TCP server socket accepting multiple clients on different ports 如何使用Java中的套接字编程连接到服务器? - How to connect to server using socket programming in Java?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM