快速业务通道

Java编程那些事儿109——网络编程示例2 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
ch(Exception e){ e.printStackTrace(); }finally{ try{ //关闭连接 br.close(); is.close(); os.close(); socket.close(); }catch(Exception e){ e.printStackTrace(); } } } }

在该示例中,首先建立一个到IP地址为127.0.0.1的端口为10001的连接,然后进行各个流的初始化工作,将逻辑控制的代码放入在一个while循环中,这样可以在客户端多次进行输入。在循环内部,首先判断用户输入的是否为quit字符串,如果是则结束程序,如果输入不是quit,则首先校验输入的是否是数字,如果不是数字则直接输出“输入错误!”并继续接收用户输入,如果是数字则发送给服务器端,并根据服务器端的反馈显示相应的提示信息。最后关闭流和连接,结束客户端程序。

Java编程那些事儿109——网络编程示例2(3)

时间:2010-03-20 csdn 陈跃峰

服务器端程序的实现还是分为服务器控制程序和逻辑线程,实现的代码分别如下:

package guess; import java.net.*; /** * TCP连接方式的服务器端 * 实现功能:接收客户端的数据,判断数字关系 */ public class TCPServer { public static void main(String[] args) { try{ //监听端口 ServerSocket ss = new ServerSocket(10001); System.out.println("服务器已启动:"); //逻辑处理 while(true){ //获得连接 Socket s = ss.accept(); //启动线程处理 new LogicThread(s); } }catch(Exception e){ e.printStackTrace(); } } } package guess; import java.net.*; import java.io.*; import java.util.*; /** * 逻辑处理线程 */ public class LogicThread extends Thread { Socket s; static Random r = new Random(); public LogicThread(Socket s){ this.s = s; start();  //启动线程 } public void run(){ //生成一个[0,50]的随机数 int randomNumber = Math.abs(r.nextInt() % 51); //用户猜的次数 int guessNumber = 0; InputStream is = null; OutputStream os = null; byte[] data = new byte[2]; try{ //获得输入流 is = s.getInputStream(); //获得输出流 os = s.getOutputStream(); while(true){  //多次处理 //读取客户端发送的数据 byte[] b = new byte[1024]; int n = is.read(b); String send = new String(b,0,n); //结束判别 if(send.equals("quit")){ break; } //解析、判断 try{ int num = Integer.parseInt(send); //处理 guessNumber++; //猜的次数增加1 data[1] = (byte)guessNumber; //判断 if(num > randomNumber){ data[0] = 1; }else if(num < randomNumber){ data[0] = 2; }else{ data[0] = 0; //如果猜对 guessNumber = 0; //清零 randomNumber = Math.abs(r.nextInt() % 51); } //反馈给客户端 os.write(data); }catch(Exception e){ //数据格式错误 data[0] = 3; data[1] = (byte)guessNumber; os.write(data);  //发送错误标识 break; } os.flush();   //强制发送 } }catch(Exception e){ e.printStackTrace(); }finally{ try{ is.close(); os.close(); s.close(); }catch(Exception e){} } } }

在该示例中,服务器端控制部分和前面的示例中一样。也是等待客户端连接,如果有客户端连接到达时,则启动新的线程去处理客户端连接。在逻辑线程中实现程序的核心逻辑,首先当线程执行时生产一个随机数字,然后根据客户端发送过来的数据,判断客户端发送数字和随机数字的关系,然后反馈相应的数字的值,并记忆客户端已经猜过的次数,当客户端猜中以后清零猜过的次数,使得客户端程序可以继续进行游戏。

总体来说,该程序示例的结构以及功能都与上一个程序比较类似,希望通过比较这两个程序,加深对于网络编程的认识,早

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号