重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你程序是:
成都创新互联网站建设公司一直秉承“诚信做人,踏实做事”的原则,不欺瞒客户,是我们最起码的底线! 以服务为基础,以质量求生存,以技术求发展,成交一个客户多一个朋友!专注中小微企业官网定制,成都做网站、网站设计,塑造企业网络形象打造互联网企业效应。
服务端有不断的向客服端写信息,客户端有不断的读来自服务端的信息。
但是反过来,客户端没有不断的向服务端写信息。服务端也没有不断的读来自客户端的信息。
用线程解决:
在客户端新加一条线程,专门用来读取来自服务端的信息。
在服务端新加一条线程,专门用来读取来自客户端的信息。
而在各自的main()函数中只负责不断接收system.in信息,然后发送信息..
其实不用线程的。。我也改了下,改的好像较多。
运行步骤:
开server端,开kehu端。客房端先写入信息。。然后,你一句我一句。只能按这顺序。。这就是没用线程的结果。
代码如下:
服务端:
import java.net.*;
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.net.*;
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("服务器未开户或己关闭~");
}
}
}
最简答的
int i = 0; //记录循环的次数
while(true){
//为了让你看到循环的打印信息
System.out.println(++i+"次死循环");
}
当某一扫描器抛出 InputMismatchException 时,该扫描器不会传递导致该异常的标记,因此可以通过其他某种方法来获取或跳过它。
这是java API文档中的原话。意思是说,如果nextInt方法没有成功解析出一个整数,那么你的输入不会被忽略。因为它或许能被其它格式解析。
那么你的程序中输入了a后,出现异常,number被赋值100,开始下一次循环,但这时数据缓冲区内你上次输入的a还在,并没有清除,这时继续解析a,还是错误,于是这个过程就一直重复下去了。
现在你要改的是,出现错误把这次的输入清除,只要在catch中,加一句:input.next()就搞定了!