[求助] 我写的第一个聊天小程序,很幼稚的那种。 为什么Server说了一句话,Client收不到呢?

qq-dabins 2008-04-28 09:00:06
已经建立连接,Server窗口显示"A client connected."
然后在Server窗口输入"Hello",但是Client窗口什么也没接收到,怎么回事呢?

==[TCPServer.java]==
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(6000);
Socket s = null;
BufferedReader localBr = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = null;
BufferedReader br = null;
while(true) {
s = server.accept();
System.out.println("A client connected.");
pw = new PrintWriter(s.getOutputStream());
br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String str = null;
while(true) {
str = localBr.readLine();
System.out.println("Server: " + str);
pw.write("Server: " + str);
System.out.println(br.readLine());
if(str.equalsIgnoreCase("exit")) {
break;
}
}
pw.close();
br.close();
localBr.close();
s.close();
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("error in server");
}
}
}


==[TCPClient.java]==
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) {
try {
Socket s = new Socket("222.90.199.75", 6000);
BufferedReader localBr = new BufferedReader(new InputStreamReader(System.in));
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter pw = new PrintWriter(s.getOutputStream());
String str = null;
while(true) {
System.out.println(br.readLine());
str = localBr.readLine();
System.out.println(str);
pw.write(str);
if(str.equalsIgnoreCase("exit")) {
break;
}
}
br.close();
pw.close();
localBr.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
...全文
126 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
q1531 2008-04-28
  • 打赏
  • 举报
回复
pw.flush();
jack462 2008-04-28
  • 打赏
  • 举报
回复
加个flush看看
我是风 2008-04-28
  • 打赏
  • 举报
回复
flush
dlxu 2008-04-28
  • 打赏
  • 举报
回复
在Server侧的pw.write("Server: " + str); 后面加上pw.flush();
liuyaaixx 2008-04-28
  • 打赏
  • 举报
回复
//Socket s = new Socket("222.90.199.75", 6000);
你是在本机上吗?还远程的呀?
mike110110 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dabins 的回复:]
引用 1 楼 liuyaaixx 的回复:
//Socket s = new Socket("222.90.199.75", 6000);
你是在本机上吗?还远程的呀?

自己和自己连,已经连接上了。打印出了"A client connected"
[/Quote]

自己和自己连 用Socket s = new Socket("127.0.0.1",6000);
不更稳吗???如果没有错误应该就是 flush;很重要啊!!!切忌java中没有小错误·大错误之分;
只有成功和失败!!!!!
KKK2007 2008-04-28
  • 打赏
  • 举报
回复
以下程序调试通过,改的地方做了注释
主要是这句
把你的这句pw.write("Server: " + str);
改成这样:pw.println("Server: " + str); pw.flush();
因为你客户端要是用的readLine(),你用pw.write只是输出字符串,没有输出换行"\n"
所以客户端看不到"\n"换行,客户端就认为没有读完,所以一直阻塞在那里,所以你的客户端始终是空白.
anqini 2008-04-28
  • 打赏
  • 举报
回复

pw = new PrintWriter(s.getOutputStream(),true);// 刷新缓冲区

qq-dabins 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dlxu 的回复:]
在Server侧的pw.write("Server: " + str); 后面加上pw.flush();
[/Quote]

写了仍旧不显示啊,之前没写的原因是PrintWriter有自动flush的功能。
qq-dabins 2008-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liuyaaixx 的回复:]
//Socket s = new Socket("222.90.199.75", 6000);
你是在本机上吗?还远程的呀?
[/Quote]
自己和自己连,已经连接上了。打印出了"A client connected"
内容概要:本文档围绕2026年“认证杯”数学中国数学建模网络挑战赛B题“新能源园区:微电网—电动车—建筑的协同调度”展开,系统提供了该赛题的解题思路、算法代码实现与论文作支持。核心研究内容聚焦于综合能源系统的协同优化调度,重点包括考虑热惯性的热力管道有限差分法建模与求解,以及电动汽车作为虚拟储能单元参与供热网络调度的能量量化方法。文档基于Matlab平台实现了相关仿真算法,并整合了微电网优化调度、电动汽车储能调控、多源协同运行等多项关键技术,涵盖智能优化算法、能源系统建模、电力与热力耦合调度等领域,为参赛者提供从理论建模到代码实现的全流程技术支持。; 适合人群:具备一定编程基础,熟练掌握Matlab或Python仿真工具,正在备战数学建模竞赛(尤其是“认证杯”等赛事)的高校学生及青年研究人员,同时也适用于从事综合能源系统、微电网优化、电动汽车调度等相关领域研究的专业人员。; 使用场景及目标:①为2026年“认证杯”B题参赛队伍提供完整的解题方案、算法实现与论文撰参考;②辅助科研人员快速构建微电网、电动汽车与建筑用能系统之间的多能协同调度模型;③推动热-电-储一体化系统在实际能源园区中的优化运行与学术研究发展。; 阅读建议:建议读者结合文档附带的网盘资源(含完整代码、数据资料包)同步学习,优先掌握有限差分法在热网建模中的应用与虚拟储能的量化方法,按照目录结构逐步深入,并根据具体建模需求灵活调整优化算法参数与系统约束条件,提升模型实用性与创新性。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧