ss = new ServerSocket(3001)
this.ranMethod()// 生成5个随机数
System.out.println()
} catch (IOException e) {
System.out.println("端口被占用!请重启服务器!")
e.printStackTrace()
}
while (over!=true) {
这里每次监听一个客户端。。。
try {System.out.println("监听客户端")
client = ss.accept()// 监听客户端
} catch (IOException e) {
System.out.println("监测客户端连接异常。")
e.printStackTrace()
}
第二个循环后,已经是新的客户端了。
str = this.accpetMethod()// 输出客户端信息
System.out.println(str)
bool = this.message(str)// 判断客户端输入是否为数字,是返回true,否返回false.
if (bool == true) {
bool = this.judgement(bool, str)
this.sendMethod(bool)
} else {
try {
dos = new DataOutputStream(client.getOutputStream())
dos.writeUTF("输入错误,请输入0~100间的数字!")
dos.flush()
//
} catch (IOException e) {
e.printStackTrace()
}
}
}
主要的问题是,你每一次循环都会执行accept,等待新的客户端连接。
要改的话,首先要把Accecpt后的client的处理放在独立的循环里面。也就是:
while (! over)
{
accept ()
while (client answer is wrong) // loop for current cilent.
{
// read client input.
// check client answer
// write message to client.
}
}
这样,服务器会在每次接受到一个客户端后,会进行持续的处理,直到客户端退出,然后返回accecpt下一个。
你能发现问题在于服务器同时只能为一个client服务,所以,很简单的把第二个while改成在单独的线呈里执行就好了
反对建议用TCP的答案。你要分析包是在哪儿丢的,我估计是Matlab处理不过来。Matlab远远追不上fpga的输出速度。我们用fpga的话和cpu通信用srio,cpu上跑的也是c语言程序,速度勉强跟得上fpga。如果用tcp,流控会把fpga速度给拖慢了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)