[英]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 : 到目前为止,我尝试过的是:
- 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();
}
}
- 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;
}
}
- 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.