Java服务器套接字响应

杰克·卡林

我正在尝试创建一个简单的客户端/服务器套接字通信应用程序(聊天客户端)。我花了无数小时来寻找如何解决此问题的方法,但是仍然没有运气,我可以将消息发送到服务器,但是我仍然坚持将消息从服​​务器发送回客户端。

我认为问题在于发送回服务器后如何从服务器获取消息,我删除了我以前无法使用的InputStreamReader。

(我对松散的代码表示歉意)

服务器.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作为线程运行,我不知道这是否是最好的方法。我尝试了十种方法来从服务器获取消息,但仍然不走运,如果有人可以将我指向正确的方向,我将不胜感激。

罗布米

readUTF将阻塞,直到它接收到输入结束为止,并且应该仅读取通过writeUTF方法传递的数据。

参考:进行更完整的讨论。

readUTF()导致Android应用挂起

还查看文档

您可能要更换

DataInputStream dis = new DataInputStream(clientSocket.getInputStream());

 BufferedReader reader = new BufferedReader(
        new InputStreamReader(clientSocket.getInputStream()));

 dis.readUTF();

String str = reader.readLine();

或者,如果您不使用换行标记消息的结尾

char[] buffer = new char[1024];
int read = 0;
StringBuilder sb = new StringBuilder();

while ((read = reader.read(buffer, 0, buffer.length)) > 0) {
    sb.append(buffer, 0, read);
    // conduct some test that when passes marks the end of message, then break;
}
reader.close();

String str = sb.toString().trim();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java套接字服务器无响应

来自分类Dev

Java服务器套接字

来自分类Dev

Java Web套接字服务器

来自分类Dev

节点服务器,套接字,请求和响应超时

来自分类Dev

C:套接字:无法读取整个服务器的响应

来自分类Dev

无法从PHP套接字服务器获取响应

来自分类Dev

无法从PHP套接字服务器获取响应

来自分类Dev

Java客户端/服务器套接字程序-服务器不响应客户端请求

来自分类Dev

通过Java和Android中的套接字获取服务器响应

来自分类Dev

服务器未使用套接字编程在Java中发送响应

来自分类Dev

Java套接字编程。我如何在后台等待服务器响应?

来自分类Dev

套接字服务器同时响应来自客户端套接字的多个请求

来自分类Dev

设置客户端套接字和服务器套接字侦听器 (Java)

来自分类Dev

Java HTTP / 2服务器套接字

来自分类Dev

Java套接字,回显服务器

来自分类Dev

Java客户端/服务器套接字问题

来自分类Dev

带有 Java 套接字服务器的 Rest API

来自分类Dev

Java TCP 客户端/服务器套接字

来自分类Dev

将输入从C套接字客户端读取到Java套接字服务器

来自分类Dev

将消息从Java套接字发送到PHP服务器套接字

来自分类Dev

无法从Java套接字服务器接收数据到C套接字客户端

来自分类Dev

将输入从C套接字客户端读取到Java套接字服务器

来自分类Dev

Java套接字服务器-客户端;卡在服务器端

来自分类Dev

Cordova:创建套接字服务器

来自分类Dev

套接字TCP服务器

来自分类Dev

闪亮的服务器:套接字挂起

来自分类Dev

PHP套接字服务器挂起

来自分类Dev

套接字服务器最佳方法

来自分类Dev

限制套接字服务器访问

Related 相关文章

热门标签

归档