问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java中用Socket向ServerSocket发送信息,ServerSocket用接收到的Socket返回一条信息,但是返回时报错...

发布网友 发布时间:2022-04-13 21:52

我来回答

4个回答

热心网友 时间:2022-04-13 23:21

 static int SERVERPORT=12345;
 
 public static void main(String[] args) throws Exception {  
    boolean flag = true;
    ServerSocket server = new ServerSocket(SERVERPORT);            
    while(flag) {                
     Socket s = server.accept();                
     DataInputStream in = new DataInputStream(s.getInputStream()); 
     String str = in.readUTF();                
     System.out.println(str);                
     DataOutputStream out = new DataOutputStream(s.getOutputStream());                
     String msg = "hello client";                
     out.writeUTF(msg);       
     out.flush();         
   s.close();
    } 
  } 
 
public static void main(String[] args) throws Exception {
  Socket s = new Socket("127.0.0.1", SERVERPORT);            
  DataOutputStream out = new DataOutputStream(s.getOutputStream());            
  String msg = "hello server";            
  out.writeUTF(msg);
  out.flush();          
  DataInputStream in = new DataInputStream(s.getInputStream());            
  String str = in.readUTF();            
  System.out.println(str);  
  s.close();
 }

注意:流不能关闭,调用流的close方法会导致socket关闭

追问谢谢你!能不能改成基础流InputStream和OutputStream,因为我们要处理byte数组,我之前改的用基础流的没有关闭流也是用flush()但还是不行

追答程序还是你自己写,就当是练手吧。
不要用read()==-1来判断是否结束,而改用先写要写出的byte[]的长度,接收时先读长度,然后再用read(byte[] b, int off, int len)读,直到读满长度为止

热心网友 时间:2022-04-14 00:39

while((t=in.read()) != -1) { <--改为 t=in.read(bytes) bytes[i] = (byte)t;
i++; }t的结果你独到的字节的个数 ,不是具体的值,具体的值已经保存到字节数组里面去了
应该这样
str += new String(bytes); 这样可以独到每一个具体的值

另外,你把out.close() 改成 out.flush() 你再测试下结果

热心网友 时间:2022-04-14 02:14

你 服务器端写完之后就关闭了,所以会包socket is closed.

热心网友 时间:2022-04-14 04:05

while((t=in.read()) != -1) { bytes[i] = (byte)t; i++; } String str = new String(bytes); System.out.println(str);
改为
while((i=in.read(bytes))!=-1){
System.out.print(new String(bytes,0,1))
}追问客户端和服务器的读操作都这么写么?这句--System.out.print(new String(bytes,0,1))--什么意思?循环变量 i 和每次循环取得的 t 都没有意义了,麻烦详解下整个循环到底怎么写?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
成都汇众益智游戏学院怎么样 为什么苹果手机屏幕老是自动滚上去? roughness test什么意思 国家标准打印纸为每包500张,小雨同学家里新买—包打印 纸,她想练习... 谁知道卡布奇诺含义 卡布奇诺咖啡历史 电脑针式打印纸有哪些规格? 外籍人才招聘 接种甲肝疫苗会出现什么不良反应 中华人民共和国境内的任何人均应接种哪些疫苗 大家好,请问用一台手机直播王者荣耀可以几个平台一起直播吗?就是虎牙、快手、斗鱼一起直播王者荣谢谢 我姓李,我的孩子是2010&#47;12&#47;29下午5;29出生,是个女孩体重6斤3俩,现在孩子马上就要出院了,求高人帮助。 出生在1993农历3月29中午十二点到一点之间女孩姓李应该取个什么名字好呢 女儿2013年正月十二,上午十一点三十八分出生。父亲姓李属鸡、母亲姓吴属羊。请帮忙起什么名字好? 帮我侄女取个名字。她姓李。2012年07月02日9点20分出世 李一馨名字好吗 姓李,女孩,农历2010年腊月24生下午4点9分生,大表家帮忙想想好名字,谢谢! 女孩取名姓李五行缺水,木,要三个字,尾字要馨 捷达车险一年交多少钱? 补习班怎么选择呢? 怎样办好一个辅导班,怎样提高教学质量 java编程出现未知错误!!急求!!跪求了!! 如何选择好的辅导机构 三角硬币苏联的1970年的,现在多少钱啊? 大力整治校外培训机构,如何看待校外培育机构乱象? 一枚1961年的苏联5戈比硬币值多少钱? 北京的中小学培训机构很多,家长朋友们是怎样选择辅导机构呢?给我点建议。谢谢! 1941年苏联cccp20硬币值钱吗 1961年前苏联硬币 1961年苏联的5元硬币价值多少钱? 这张视力表5.3(2.0)那一行写的是什么字? 5个视力表的e图那两个位似 如何注册 跪求日本高清视频中文字幕在线,【免费高清】在线观看百度网盘资源 燃气灶是离子感应还是电偶式保护好 热电偶熄火保护和离子感应熄火保护哪个更好一些? 离子熄火还是热电偶好 《巡回检察组》大背头郑天明去油成功!你认为西装对男人来说有多重要? 求一部有点小A的韩国电影 1,男人为什么逢喜庆日工作日要西装革履?2,男人为什么要剪平头,甚至理光头? 为什么领导都穿西装? 量身定制的西服为什么被称为是男士品位的象征 穿西服会给人带来什么样的感觉? 求1500字的名著读后感,急用!!最好是爱的教育!! 用java的Socket编写的小小小聊天工具,在本机调试成功,但是在两台能互相ping通的电脑却不能连接上 《爱的教育》读后感【最好原创】 名著《爱的教育》写读后感 原创最好 求《爱的教育》读后感,字数越多越好,5000字最好 浅谈如何发挥少先队员的主动性做好少先队工作 求:如何开展好少先队工作和活动?