【发布时间】:2016-04-09 09:45:30
【问题描述】:
我正在尝试编写一个多客户端服务器聊天。一切都应该在同一台计算机上运行,每个客户端都在不同的 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 multithreading server client chat