java - 输出服务器问题[客户端服务器JAVA]
问题描述
嗨,我正在尝试做这个练习:定义一个套接字 - 基于客户端-服务器的应用程序。服务器必须能够同时响应多个客户端。服务器生成一个正整数值 N,用于连接的每个客户端。连接时,客户端随机生成一个整数 M。然后客户端发送 M 个服务器字符串:“string1”、“string2”、...“stringM”。传输以字符串“BYE”的发送结束。每当客户端完成传输时,服务器都会写入一个视频,该视频的长度为到目前为止从所有客户端收到的长度为 N 的字符串数。
假设没有其他错误,问题是当我第一次运行服务器时,它没有在输出中返回任何内容......你能帮我吗?
package clientEsame;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ClientEsame {
public static void main(String[] args) {
int M = (int) (Math.random() * 100) + 10;
try (Socket server = new Socket("localhost", 5000);
PrintWriter out = new PrintWriter(server.getOutputStream(),true);) {
for (int i = 0; i < M; i++) {
out.println("stringa"+i);
}
out.println("BYE");//la trasmissione termina inviando la stringa bye
out.flush();
} catch (IOException ex) {
Logger.getLogger(ClientEsame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
////////////////////////
package serveresame;
import java.io.BufferedReader;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ServerEsame {
private static final int PORTA=5000;
/**
*
*/
public static int N = (int) (Math.random() * 100) + 10;
/*
* @param args the command line arguments
*/
public static void main(String[] args) {
ServerSocket server;
try {
server = new ServerSocket(5000);
//System.out.println("Server creato, in attesa di un client");
while (true) {
//System.out.println("In attesa di un client");
Socket s = server.accept();
//System.out.println("Client collegato");
ThreadEsame t = new ThreadEsame(s);
t.start();
}
} catch (IOException ex) {
Logger.getLogger(ServerEsame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
//////////////////////////////////////////////////
package serveresame;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
public class ThreadEsame extends Thread {
private final Socket client;
// private final int N;
public ThreadEsame(Socket client) {
this.client = client;
}
@Override
public void run() {
try {
BufferedReader in;
in = new BufferedReader( new InputStreamReader(client.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String letto;
while( !"BYE".equals(letto= stdIn.readLine()) ) { //la lettura non termina finche non compare BYE
confronto(letto);
}
} catch (IOException ex) {
Logger.getLogger(ThreadEsame.class.getName()).log(Level.SEVERE, null, ex);
}
if (client != null) {
try {
client.close();
} catch (IOException ex) {
Logger.getLogger(ThreadEsame.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public void confronto(String t){
int acc=0;
if(ServerEsame.N == t.length()){
acc++;
System.out.println("Ci sono"+acc+"stringhe di lunghezza"+ServerEsame.N);
}
}
}
解决方案
推荐阅读
- r - 如何在ggplot中为线条设置不同的颜色
- apache - httpd (apache) - 重写页面 -> 查询参数
- python - 为什么 map(outer.remove, inner) 不能从外部移除内部?
- python - 我想用这个人的名字创建一个文件,我怎样才能没有错误?
- windows - 拖动文件夹时资源管理器冻结,直到 VB 事件完成
- java - 如何修复这个 if-then 结构以根据需要跳出循环?
- rust - 引用和变异 id_tree Rust 的问题
- python - 如何在python中将字符串日期(2021年1月25日)转换为ymd日期(2021-01-01)
- r - R Markdown文档中所有方程式中的显示样式文档整个文档
- javascript - JS:3个滚动条同步