gpt4 book ai didi

java - 多客户端java客户端服务器聊天

转载 作者:行者123 更新时间:2023-11-30 03:06:36 24 4
gpt4 key购买 nike

我正在尝试编写一个多客户端服务器聊天。一切都应该在同一台计算机上运行,​​每个客户端都在不同的 shell 终端控制台中。我读了这边的几个线程,人们说我应该在服务器上为每个连接的客户端运行新线程。这就是我所做的。不过,服务器正在其控制台上打印来自每个客户端的消息,但客户端只能看到他们编写的消息,而不是聊天中提交的每条消息。我应该做什么来修复它?

这是代码:服务器:

//package javauj.serwer;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;


public class Server {
private static final int PORT_NUM = 5051;
private static ServerSocket serS;
private static Socket s;

public static void main(String[] args) throws IOException{
DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(df.format(cal.getTime())+" Server waiting on port "+PORT_NUM);
try {
serS = new ServerSocket(PORT_NUM);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



while(true){
try {
s = serS.accept();
System.out.println("New user connected");
ServerThread st=new ServerThread(s);
st.start();


} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}





}
}
}

服务器线程:

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;


public class ServerThread extends Thread {
Socket socket=null;
private Scanner sc;
private PrintStream ps;
public ServerThread(Socket s) {
this.socket=s;

}



public void run(){
DateFormat df = new SimpleDateFormat("dd/MM/yy HH:mm:ss");
Calendar cal = Calendar.getInstance();
String response;
while(true){
try {
sc = new Scanner(socket.getInputStream());
ps = new PrintStream(socket.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

if((response=sc.nextLine())!=null){


System.out.println(df.format(cal.getTime())+" Napisal "+response);

ps.println(df.format(cal.getTime())+" Napisal :"+response);

}
}


}


}

和客户端

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;




public class Client {
static Scanner sc;
static Scanner sc2;
static Socket s;
static String response;
public static void main(String[]args) throws UnknownHostException, IOException{
String send;
sc=new Scanner(System.in); //client send scanner
s = new Socket("127.0.0.1", 5051);
sc2 = new Scanner(s.getInputStream()); //client response scanner
PrintStream ps = new PrintStream(s.getOutputStream());

while(true){

System.out.println(">");
send = sc.nextLine();

ps.println(send);
// I tried run new thread for responses
//Thread thread = new Thread(new Runnable(){
//public void run(){
//while(true){
response=sc2.nextLine();
System.out.println(response);
// }
//}
//});
}

}
}

最佳答案

您需要在客户端有两个线程:

  • 用于读取来自服务器的消息
  • 另一个线程来获取用户的输入

第一个线程(来自服务器的读取器)只是读取传入消息并将其打印到控制台

第二个线程(写入服务器)获取用户输入并将其发送到服务器。

实际上,在您的代码中,客户端上只有一个线程(主线程)。

关于java - 多客户端java客户端服务器聊天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34613867/

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