大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你程序是: 服务端有不断的向客服端写信息,客户端有不断的读来自服务端的信息。 但是反过来,客户端没有不断的向服务端写信息。服务端也没有不断的读来自客户端的信息。 用线程解决: 在客户端新加一条线程,专门用来读取来自服务端的信息。 在服务端新加一条线程,专门用来读取来自客户端的信息。 而在各自的main()函数中只负责不断接收system.in信息,然后发送信息.. 其实不用线程的。。我也改了下,改的好像较多。 运行步骤: 开server端,开kehu端。客房端先写入信息。。然后,你一句我一句。只能按这顺序。。这就是没用线程的结果。 代码如下: 服务端: import java点虐 .*; import java.io.*; public class Server { public static void main(String[] args) { System.out.println("我是服务器"); try { ServerSocket ss=new ServerSocket(8000); Socket sk=ss.accept(); OutputStream os=sk.getOutputStream(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os)); bw.write("你好,我是服务器,有什么需要我服务的嘛?\n"); bw.flush(); InputStream is=sk.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); while(true) { String str=br.readLine(); if(str.equals("bye")||str==null)break; System.out.println("客户端说:"+str); String sr=""; BufferedReader br1=new BufferedReader(new InputStreamReader(System.in)); sr=br1.readLine(); bw.write(sr+"\n"); bw.flush(); } } catch (Exception e) { System.out.println("客用户机己断开"); } } } 客户端: import java点虐 .*; import java.io.*; public class kehu { public static void main(String[] args) { System.out.println("我是客户"); try { Socket s=new Socket(InetAddress.getByName(null),8000); InputStream is=s.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); OutputStream os=s.getOutputStream(); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os)); String sr=""; while(true) { sr=br.readLine(); if(sr.equals("bye")||sr==null)break; System.out.println("服务器说"+sr); BufferedReader br1=new BufferedReader(new InputStreamReader(System.in)); sr=br1.readLine(); bw.write(sr+"\n"); bw.flush(); } } catch (Exception e) { System.out.println("服务器未开户或己关闭~"); } } }
湖滨网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联于2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
你这个在输入整数是可以完美结束的,死循环是因为你输入的不是数字!
造成异常捕捉,然后你又没有处理异常,也就是说你这个in一直处于一个异常的状态
它肯定是会一直进行捕捉的;
你在这里初始化一下就可以解决问题的所在了!
catch (Exception e) {
System.out.println("请输入整数!!!");
in=new Scanner(System.in);//这里是核心,你初始化一下即可;
continue;
java 停止一个死循环,可以使用break关键字,跳出循环,如下代码:
package com.qiu.lin.he;
public class Ceshi {
public static void main(String[] args) {
for (int i = 2; i 0; i++) {
if (i == 80) {
System.out.println("死循环退出了");
break;
}
}
}
}
运行结果如下:
是这样的,ss.accept()方法是阻塞的,也就是说ss所在的线程运行到accept()函数就会一直等待,直到ss接收到了一个Socket请求。正因为accept()是阻塞的,所以一般会把这个函数放在一个单独的线程,这样就不会影响主线程(例如程序界面)的运行,Socket编程几乎是肯定和多线程编程一起用的。accept()放进了单独的线程了自然就不会影响后面代码的执行,因为这时accept()的时间片和后续代码的时间片会由JVM调配,而不是按照代码编排的先后顺序了。
另外你对死循环的理解有偏差,所谓死循环是指循环条件永远为真而导致循环一直不结束,而由于循环内部的方法阻塞导致的循环不结束不属于死循环,这两个有本质的差别。通常Socket.accept()是该放进一个死循环的,也就是你的while(true);