【发布时间】:2013-12-13 06:23:23
【问题描述】:
我正在尝试创建一个简单的客户端/服务器套接字通信应用程序(聊天客户端)。我花了无数个小时寻找如何解决这个问题,但仍然没有运气,我可以将消息发送到服务器,但我坚持将消息从服务器发送回客户端。
我认为问题在于我在发回消息后如何从服务器获取消息,我删除了我无法使用的 InputStreamReader。
(我为草率的代码提前道歉)
Server.java
public class Server extends Thread {
@SuppressWarnings("unused")
private static Socket socket;
static int port = 1337;
static ObjectOutputStream output;
@SuppressWarnings("resource")
public static void main(String[] args) throws IOException{
ServerSocket ss = new ServerSocket(port);
System.out.println("Server started on port: " + port);
while(!Thread.interrupted()){
try {
Socket clientSocket = ss.accept();
DataInputStream dis = new DataInputStream(clientSocket.getInputStream());
PrintStream output = new PrintStream(clientSocket.getOutputStream());
String str = (String)dis.readUTF();
String[] split = str.split("-");
String subStringUsername = split[0];
String subStringMessage = split[1];
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("h:mm:ss a");
String formattedTimestamp = sdf.format(date);
System.out.println("Message from " + subStringUsername + ": " + subStringMessage + " - at " + formattedTimestamp);
output.flush();
output.println("Message received! Hello client!");
System.out.println("Reply sent");
output.flush();
//TODO create new thread handle new users instead of Thread sleep
//TODO chat commands and user ID / can't be existing user
Thread.sleep(500);
}
catch(Exception e){
System.out.println(e);
}
}
}
getMessage.java
public class GetMessage extends Thread {
public void run(){
while(true) {
InputStreamReader be = new InputStreamReader();
}
}
}
这是我在 getMessage 类中留下的内容,因为我沮丧地删除了所有内容,我将 getMessage 作为一个线程运行,我不知道这是不是最好的方法。我已经尝试了 10 种方法来从服务器获取消息,但仍然没有运气,如果有人能指出我正确的方向,我将不胜感激。
【问题讨论】:
-
不要为草率的代码道歉。改进它然后发布它。
-
你为什么使用
DataInputStream?客户端也是使用DataOuputStream发送数据的Java 程序吗?如果没有,这可能不起作用,因为DataInputStream旨在以编码形式发送 Java 原始值,而不是通用数据。
标签: java sockets client serversocket