JAVA的socket重复输入流_让服务器继续使用DataInputStream监听输入流[重复]

这个问题在这里已有答案:

我创建了一个java类TCPClient,它将Message对象发送到TCPServer . 我使用DataOutputStream和DataInputstream(这是我们被告知要执行的任务,我们必须同时使用它们才能将Object从客户端发送到服务器) . 这是我的TCPClient类

public class TCPClient {

public static final int PORT = 4000;

public static void main(String[] args){

String hostname = "localhost";

try(Socket client = new Socket(hostname,PORT);

//BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))) {

Message message;

String input;

String the_message;

double random;

int id;

while(!(input = stdIn.readLine()).equalsIgnoreCase("end")){

random = Math.random()*100;

message = new Message();

the_message = input;

id = (int)random;

message.setId(id);

message.setMessage(the_message);

encode(message,client);

//System.out.println(in.readLine());

}

} catch (IOException e) {

e.printStackTrace();

}

}

private static void encode(Message message, Socket client) {

try(DataOutputStream out = new DataOutputStream(client.getOutputStream())){

out.writeUTF(message.getMessage());

out.writeInt(message.getId());

} catch (IOException e) {

e.printStackTrace();

}

}}

TCPServer类

public class TCPServer {

public static final int PORT = 4000;

public static void main(String[] args) {

try (ServerSocket ss = new ServerSocket(PORT);

Socket cs = ss.accept();

//PrintWriter out = new PrintWriter(cs.getOutputStream(), true);

) {

Message message = decode(cs);

System.out.print("Message received: " + message.getMessage() + " id: " + message.getId());

} catch (IOException e) {

e.printStackTrace();

}

}

private static Message decode(Socket client){

Message message = new Message();

try(DataInputStream in = new DataInputStream(client.getInputStream())){

message.setMessage(in.readUTF());

message.setId(in.readInt());

return message;

} catch (IOException e) {

System.err.print("Error happened while decoding object");

return null;

}

}}

我不想做的是,当我从客户端发送新消息时,服务器关闭 . 我希望服务器继续监听消息 . 我该如何做到这一点?

试过这样的事情

while(cs.getInputStream().available()==0){

Message message = decode(cs);

System.out.println("Message received = " + message.getMessage() + " id " + message.getId());

}

但没有工作

编辑:我不想构建一个多线程服务器来托管几个客户端 . 我希望单个服务器从唯一客户端接收多个消息,并在客户端发送“结束”时关闭套接字,我不知道是否可能 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值