- 浏览: 736725 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
lengzl:
请问,那个Node 是哪个包里面的类?
JAVA 二叉树的递归和非递归遍历 -
gongchuangsu:
总结的很好,感谢感谢
JAVA 二叉树的递归和非递归遍历 -
Caelebs:
666666666 居然是10年发的,难怪截屏自动保存的名字是 ...
截图工具 -
jijiqw:
是注解不是注释。。。
Spring @Transactional (一) -
letueo:
[b][b][b][b][b][b][b][b][b][b][ ...
Spring @Transactional (一)
利用SOCKET通信技术开发一个C/S结构的程序,要求客户端具有登录验证界面,服务器端采用多线程,用户命和密码的验证在服务器端执行。
用的是swing的技术.不是web的.
现在给贴出我的代码: 整个结构分两个工程
1。服务端工程NioServer.java: 采用nio 方式的异步socket通信,不仅可以实现你的服务器还可以让你多学习一下什么是nio
2。客户端工程UserClient.java: 采用Swing技术画了一个简单的UI界面,比较土,原因是我没那么多时间去设计界面,你需要的话可以自己去修改得漂亮点,相信不难
现在贴工程1:
下面贴工程2
用的是swing的技术.不是web的.
现在给贴出我的代码: 整个结构分两个工程
1。服务端工程NioServer.java: 采用nio 方式的异步socket通信,不仅可以实现你的服务器还可以让你多学习一下什么是nio
2。客户端工程UserClient.java: 采用Swing技术画了一个简单的UI界面,比较土,原因是我没那么多时间去设计界面,你需要的话可以自己去修改得漂亮点,相信不难
现在贴工程1:
package com.net; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.util.Iterator; import java.util.Set; public class NioServer { public static final int SERVERPORT=5555; public static final String USERNAME="wangzhirong"; public static final String PASSWORD="123456"; public static final String ISACK="ACK"; public static final String ISNAK="NAK!"; // Selector selector;//选择器 // SelectionKey key;//key。 一个key代表一个Selector 在NIO通道上的注册,类似主键; // //取得这个Key后就可以对Selector在通道上进行操作 private ByteBuffer echoBuffer = ByteBuffer.allocate( 1024 );// 通道数据缓冲区 public NioServer(){ } public static void main(String[] args) throws IOException { NioServer ns=new NioServer(); ns.BuildNioServer(); } public void BuildNioServer() throws IOException{ ///////////////////////////////////////////////////////// ///////先对服务端的ServerSocket进行注册,注册到Selector //// ///////////////////////////////////////////////////////// ServerSocketChannel ssc = ServerSocketChannel.open();//新建NIO通道 ssc.configureBlocking( false );//使通道为非阻塞 ServerSocket ss = ssc.socket();//创建基于NIO通道的socket连接 //新建socket通道的端口 ss.bind(new InetSocketAddress("127.0.0.1",SERVERPORT)); Selector selector=Selector.open();//获取一个选择器 //将NIO通道选绑定到择器,当然绑定后分配的主键为skey SelectionKey skey = ssc.register( selector, SelectionKey.OP_ACCEPT ); //////////////////////////////////////////////////////////////////// //// 接收客户端的连接Socket,并将此Socket也接连注册到Selector //// /////////////////////////////////////////////////////////////////// while(true){ int num = selector.select();//获取通道内是否有选择器的关心事件 if(num<1){continue; } Set selectedKeys = selector.selectedKeys();//获取通道内关心事件的集合 Iterator it = selectedKeys.iterator(); while (it.hasNext()) {//遍历每个事件 try{ SelectionKey key = (SelectionKey)it.next(); //有一个新联接接入事件,服务端事件 if ((key.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) { // 接收这个新连接 ServerSocketChannel serverChanel = (ServerSocketChannel)key.channel(); //从serverSocketChannel中创建出与客户端的连接socketChannel SocketChannel sc = serverChanel.accept(); sc.configureBlocking( false ); // Add the new connection to the selector // 把新连接注册到选择器 SelectionKey newKey = sc.register( selector, SelectionKey.OP_READ ); it.remove(); System.out.println( "Got connection from "+sc ); }else //读客户端数据的事件,此时有客户端发数据过来,客户端事件 if((key.readyOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ){ // 读取数据 SocketChannel sc = (SocketChannel)key.channel(); int bytesEchoed = 0; while((bytesEchoed = sc.read(echoBuffer))> 0){ System.out.println("bytesEchoed:"+bytesEchoed); } echoBuffer.flip(); System.out.println("limet:"+echoBuffer.limit()); byte [] content = new byte[echoBuffer.limit()]; echoBuffer.get(content); String result=new String(content); doPost(result,sc); echoBuffer.clear(); it.remove(); } }catch(Exception e){} } } } public void doPost(String str,SocketChannel sc){ boolean isok=false; int index=str.indexOf('|'); if(index>0){ String name=str.substring(0,index); String pswd=str.substring(index+1); if(pswd==null){pswd="";} if(name!=null){ if(name.equals(USERNAME) && pswd.equals(PASSWORD) ){ isok=true; }else{ isok=false; } }else{ isok=false; } }else{ isok=false; } String result=""; if(isok){ result="ACK"; }else{ result="NAK!"; } ByteBuffer bb = ByteBuffer.allocate( result.length() ); bb.put(result.getBytes()); bb.flip(); try { sc.write(bb); } catch (IOException e) { e.printStackTrace(); } bb.clear(); } }
下面贴工程2
import java.awt.Color; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; public class UserClient implements ActionListener{ JFrame jf; JPanel jp; JLabel label_name; JLabel label_pswd; JTextField userName; JButton jb; JPasswordField paswrd; JLabel hintStr; public UserClient (){ jf=new JFrame("XXX 登陆系统"); jp=new JPanel(); jf.setContentPane(jp); jf.setPreferredSize(new Dimension(350,220)); jp.setPreferredSize(new Dimension(350,220)); jp.setBackground(Color.gray); label_name=new JLabel(); label_name.setPreferredSize(new Dimension(150,30)); label_name.setText("请输入帐户(数字或英文):"); userName=new JTextField(); userName.setPreferredSize(new Dimension(150,30)); jp.add(label_name); jp.add(userName); label_pswd=new JLabel(); label_pswd.setPreferredSize(new Dimension(150,30)); label_pswd.setText("请输入密码:"); jp.add(label_pswd); paswrd=new JPasswordField(); paswrd.setPreferredSize(new Dimension(150,30)); jp.add(paswrd); jb=new JButton("OK"); jb.setPreferredSize(new Dimension(150,30)); jb.setText("确 定"); jb.addActionListener( this); jp.add(jb); hintStr=new JLabel(); hintStr.setPreferredSize(new Dimension(210,40)); hintStr.setText(""); hintStr.setForeground(Color.RED); jp.add(hintStr); jf.pack(); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } private String name; private String pswd; public void actionPerformed(ActionEvent e) { name=userName.getText().trim(); pswd=new String(paswrd.getPassword()); if(pswd==null){ pswd=""; }else{ pswd=pswd.trim(); } if(name!=null && name.length()>0){ hintStr.setText("正在验证客户端,请稍候..."); start(); } } OutputStream os; Socket s; InputStream is; public void start(){ //建立联网线程 new Thread(new Runnable(){ public void run() { try { s=new Socket("127.0.0.1",5555); //写 os=s.getOutputStream(); os.write(name.getBytes()); os.write('|');//用户名与密码用"|"分隔 os.write(pswd.getBytes()); os.flush(); //读内容 Thread.sleep(1000); is=s.getInputStream(); int len=is.available(); System.out.println("len:"+len); byte[] bytes=new byte[len]; is.read(bytes); String resut=new String(bytes); System.out.println("resut:"+resut); //TODO 这里通过返回结果处理 if(resut.equals("ACK")){ hintStr.setText("验证成功,欢迎光临!"); }else{ paswrd.setText(null); hintStr.setText("用户名或密码错误,请重新输入"); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); }finally{ // try { // os.close(); // is.close(); // s.close(); // } catch (IOException e) { // e.printStackTrace(); // } } } }).start(); } public static void main(String[] args) { new UserClient(); } } 本回答对我有帮助 6
发表评论
-
Servlet上传文件
2012-02-07 23:58 1457准备工作:要到http://commons.apache.or ... -
成为Java高手需要达到的25个学习目标--经典
2012-01-29 16:07 1309本文将告诉你学习Java需 ... -
Timer, Quartz 和 Spring 实现作业调度
2011-11-28 15:43 1148一、java.util.Timer ... -
Java 产生不重复的随机数
2011-06-22 23:32 2329int numberCount = 6; ... -
Date类学习总结(Calendar Date 字符串 相互转换 格式化)
2011-06-20 16:12 1633Date类学习总结 1.计算某一月份的最大天数 ... -
jsp中的cookie用法小实例
2011-06-20 00:13 2467这个小实例有三个页面 index.jsp页面内容如下: Y ... -
JS实现简单的增删改查
2011-06-19 23:41 12926<%@ page language="ja ... -
Jsp 动态显示系统时间
2011-06-19 23:24 4864<%@ page language=" ... -
java 动态显示时间
2011-06-19 23:13 4022import java.util.Date; p ... -
js 动态显示时间
2011-06-19 22:53 1799<%@ page language=" ... -
HTML 显示系统时间
2011-06-19 22:13 7843代码1:(显示静态时间) <script type=& ... -
JavaScript 动态显示系统时间
2011-06-19 19:36 2050JavaScript 动态显示系统时间 <html ... -
两例JavaScript 获取当前系统日期和时间
2011-06-19 19:20 1219两例JavaScript 获取当前系统日期和时间 QUOTE ... -
java五种JSP页面跳转方法详解
2011-06-19 17:08 14411. RequestDispatcher.forward() ... -
Java Object方法
2011-06-19 16:47 1274package com.abin.test.connectio ... -
Java 数组,List,Itarator循环
2011-06-19 16:01 2266package com.abin.test.connect ... -
JAVA DBClass操作数据库,这样算不算单列模式
2011-06-19 14:53 1218到底怎样才算单列模式,单列模式事什么概念 package c ... -
Oracle日期函数集锦
2011-06-16 20:55 869Oracle日期函数集锦(一) 一、 常用日期数据格式 1 ... -
java 页面传送数组
2011-06-15 14:56 25551.可以通过嵌入java代码调用session或者reques ... -
java Calendar当前时间
2011-06-14 13:40 1621Calendar c = Calendar.getIn ...
相关推荐
实验名称 基于Socket的C/S编程实验 实验名称 基于Java RMI的C/S编程实验
第6章介绍了几个Java的高级应用,包括多线程、网络编程和GUI编程。...网络编程,介绍如何通过HTTP协议访问Web应用,如何通过Socket编程实现C/S结构的应用程序;GUI,介绍如何编写图形用户界面。最后给出了3个综合实例。
掌握JDK调试和运行程序的方法、面向对象编程的思想、Java中的基本方法和技术,能够熟练使用Java设计、编写程序,特别是基于TCP/IP的Socket编程,并能运用这些知识方法完成C/S和B/S结构程序的设计工作。通过实验,...
系统采用客户机/服务器(C/S)的模式设计,是一个三层C/S结构,数据库服务器、应用程序服务器端、应用程序客户端,按照此设计思想,系统采用C/S结构,可以将任务合理分配到客户机端和服务器端 ,从而降低了系统的...
系统采用客户机/服务器(C/S)的模式设计,是一个三层C/S结构,数据库服务器、应用程序服务器端、应用程序客户端,按照此设计思想,系统采用C/S结构,可以将任务合理分配到客户机端和服务器端 ,从而降低了系统的...
系统采用客户机/服务器(C/S)的模式设计,是一个三层C/S结构,数据库服务器、应用程序服务器端、应用程序客户端,按照此设计思想,系统采用C/S结构,可以将任务合理分配到客户机端和服务器端 ,从而降低了系统的...
系统采用客户机/服务器(C/S)的模式设计,是一个三层C/S结构,数据库服务器、应用程序服务器端、应用程序客户端,按照此设计思想,系统采用C/S结构,可以将任务合理分配到客户机端和服务器端 ,从而降低了系统的...
而基于TCP/IP协议网络环境下的应用程序 是通过客户机/服务器(C/S)作用方式模式在网络(应用)编程界面实现的。本次实验采用 java语言设计一个基于C/S模式的TCP网络通讯程序。实现客户端与服务器端之间的数据 传输。 ...
本文使用的网络编程模型是客户端/服务端(C/S)结构,遵循TCP和UDP协议,网络聊天功能通过socket模块实现,用户在客户端上登录到指定端口的服务端与其他用户进行网络聊天。服务器启动后,等待客户端的连接,转发客户端指定...
系统采用客户机/服务器(C/S)的模式设计,是一个三层C/S结构,数据库服务器、应用程序服务器端、应用程序客户端,按照此设计思想,系统采用C/S结构,可以将任务合理分配到客户机端和服务器端 ,从而降低了系统的...
系统采用客户机/服务器(C/S)的模式设计,是一个三层C/S结构,数据库服务器、应用程序服务器端、应用程序客户端,按照此设计思想,系统采用C/S结构,可以将任务合理分配到客户机端和服务器端 ,从而降低了系统的...
系统采用客户机/服务器(C/S)的模式设计,是一个三层C/S结构,数据库服务器、应用程序服务器端、应用程序客户端,按照此设计思想,系统采用C/S结构,可以将任务合理分配到客户机端和服务器端 ,从而降低了系统的...
1、理解C/S模式的软件系统结构,掌握网络编程的基本概念; 2、了解Java 的多线程机制,掌握Java多线程技术的应用; 3、熟练掌握基于TCP协议的Socket编程; 4、熟练掌握基于UDP协议的Socket编程; 5、了解Socket编程...
系统采用客户机/服务器(C/S)的模式设计,是一个三层C/S结构,数据库服务器、应用程序服务器端、应用程序客户端,按照此设计思想,系统采用C/S结构,可以将任务合理分配到客户机端和服务器端 ,从而降低了系统的...
本文使用的网络编程模型是客户端/服务端(C/S)结构,遵循TCP和UDP协议,网络聊天功能通过socket模块实现,用户在客户端上登录到指定端口的服务端与其他用户进行网络聊天。服务器启动后,等待客户端的连接,转发客户端指定...
系统采用客户机/服务器(C/S)的模式设计,是一个三层C/S结构,数据库服务器、应用程序服务器端、应用程序客户端,按照此设计思想,系统采用C/S结构,可以将任务合理分配到客户机端和服务器端 ,从而降低了系统的...
基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...
用到多媒体技术(JAVA 多媒体框架JMF),视频和音频用TRP协议传输,用到Socket编程技术,多播技术。网络视频会议首先是基于网络传输的,那么就必然要依托于JAVA网络编程的相关知识。在这基础上,由于相关音频、视频...