- 浏览: 748932 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
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 1501准备工作:要到http://commons.apache.or ... -
成为Java高手需要达到的25个学习目标--经典
2012-01-29 16:07 1355本文将告诉你学习Java需 ... -
Timer, Quartz 和 Spring 实现作业调度
2011-11-28 15:43 1182一、java.util.Timer ... -
Java 产生不重复的随机数
2011-06-22 23:32 2367int numberCount = 6; ... -
Date类学习总结(Calendar Date 字符串 相互转换 格式化)
2011-06-20 16:12 1674Date类学习总结 1.计算某一月份的最大天数 ... -
jsp中的cookie用法小实例
2011-06-20 00:13 2496这个小实例有三个页面 index.jsp页面内容如下: Y ... -
JS实现简单的增删改查
2011-06-19 23:41 12973<%@ page language="ja ... -
Jsp 动态显示系统时间
2011-06-19 23:24 4906<%@ page language=" ... -
java 动态显示时间
2011-06-19 23:13 4066import java.util.Date; p ... -
js 动态显示时间
2011-06-19 22:53 1838<%@ page language=" ... -
HTML 显示系统时间
2011-06-19 22:13 7894代码1:(显示静态时间) <script type=& ... -
JavaScript 动态显示系统时间
2011-06-19 19:36 2089JavaScript 动态显示系统时间 <html ... -
两例JavaScript 获取当前系统日期和时间
2011-06-19 19:20 1260两例JavaScript 获取当前系统日期和时间 QUOTE ... -
java五种JSP页面跳转方法详解
2011-06-19 17:08 14811. RequestDispatcher.forward() ... -
Java Object方法
2011-06-19 16:47 1370package com.abin.test.connectio ... -
Java 数组,List,Itarator循环
2011-06-19 16:01 2317package com.abin.test.connect ... -
JAVA DBClass操作数据库,这样算不算单列模式
2011-06-19 14:53 1262到底怎样才算单列模式,单列模式事什么概念 package c ... -
Oracle日期函数集锦
2011-06-16 20:55 945Oracle日期函数集锦(一) 一、 常用日期数据格式 1 ... -
java 页面传送数组
2011-06-15 14:56 26011.可以通过嵌入java代码调用session或者reques ... -
java Calendar当前时间
2011-06-14 13:40 1689Calendar c = Calendar.getIn ...
相关推荐
【Java课程设计(C/S)】是针对计算机科学与技术专业学生的一项实践任务,旨在让学生深入理解客户端/服务器(Client/Server,C/S)架构,并掌握使用Java编程语言进行系统开发的技术。在这个项目中,学生们通常会被...
6. **网络编程**:在C/S架构中,客户端和服务器之间的通信涉及到网络编程,Java的Socket编程接口(如TCP/IP)可能被用到。 7. **MVC设计模式**:Model-View-Controller模式是Java Web开发中常见的设计模式,可能被...
在C/S结构中,服务器创建一个监听Socket,等待客户端的连接请求,一旦客户端连接,双方就可以通过Socket交换数据。 2. **ServerSocket类**:在服务器端,我们需要创建一个ServerSocket实例,指定一个端口号来监听...
C/S结构通常分为两部分:服务器端(Server)和客户端(Client)。服务器端运行特定的服务,等待客户端发起连接请求;客户端则向服务器发送请求,并接收服务器响应。在这个考试系统中,服务器端可能负责验证用户的...
Java的Socket编程是实现C/S通信的关键。Socket是TCP/IP协议的一部分,用于两个网络应用程序之间建立连接,进行双向通信。在聊天系统中,服务器会创建一个监听Socket,等待客户端的连接请求。一旦连接建立,客户端和...
在实际应用中,Java的Socket编程还需要考虑到异常处理、多线程、数据编码与解码等问题。例如,为了确保网络通信的健壮性,你需要捕获并处理IOException。多线程则用于同时处理多个客户端连接,避免服务器因等待单个...
Java网络编程是构建分布式应用程序的关键技术,特别是在服务器端与客户端之间进行数据交换时。本压缩包包含了一系列关于Socket通信的实例,涵盖了从基础的单客户服务器通信到复杂的多客户服务器相互通信,以及对象...
总的来说,这个实验旨在让学生掌握Java中分布式编程的基本概念和技术,包括Socket编程和RMI,同时也会接触到Swing GUI的开发。通过实践,学生将能够理解如何在分布式环境中设计和实现高效的客户端-服务器通信,以及...
1. **Socket编程**:Java的java.net.Socket和ServerSocket类用于建立客户端和服务器之间的连接,实现数据的双向传输。 2. **多线程**:服务器通常需要同时处理多个客户端的请求,因此会用到多线程技术,每个客户端...
Java实现的C/S模式聊天室是一个典型的网络编程项目,它涉及到多线程、Socket通信、IO流处理以及用户界面设计等多个重要知识点。在这个项目中,我们将深入探讨这些关键概念。 首先,C/S(Client/Server)模式是...
本文将深入探讨使用Java实现客户端/服务器(C/S)模式的文件传输协议,并解析其实现细节。 1. **消息协议设计** - 在Java中,为了实现文件传输,我们需要定义一套消息协议。协议主要包括两种消息类型:聊天文本...
在IT领域,C/S(Client/Server)架构是一种常见的分布式应用结构,主要用于构建网络应用程序,如我们这里的"基于C/S架构的JAVA聊天程序"。在这个系统中,客户端(Client)负责用户交互,而服务器端(Server)处理...
在这个项目中,我们将深入探讨如何使用Java语言来实现一个C/S结构的QQ聊天程序,该程序模拟了真实的即时通讯体验。 【描述】:“主要是模仿QQ聊天程序,分为服务器和客户端” 模仿QQ聊天程序意味着我们需要实现...
【基于C/S结构的聊天程序】是一种典型的客户端-服务器(Client/Server,简称C/S)架构的通信系统,主要用于实现用户间的实时交互。在这种架构中,客户端是用户直接操作的界面,而服务器端则负责处理客户端发送的请求...
Java的网络编程API使得构建C/S系统变得简单,Socket和ServerSocket类是实现客户端和服务器通信的核心。客户端通过Socket连接到服务器端的特定端口,然后通过输入/输出流交换数据。服务器端则使用ServerSocket监听...
【标题】"基于C/S模式的Java聊天室"是一个典型的网络通信项目,它采用客户机/服务器(Client/Server,简称C/S)架构,通过Java编程语言实现。在这个模式下,客户端作为用户交互的界面,负责发送和接收聊天信息;而...
总的来说,“c/s结构的订票系统”是一个典型的分布式应用程序,结合了Java Swing的GUI设计与Java网络编程技术,实现了用户友好的订票流程和高效的服务器处理能力。开发者需要具备扎实的Java基础知识,理解C/S架构的...
Java聊天室是网络编程中的一个常见应用场景,它利用Socket通信机制实现客户端(Client)与服务器端(Server)的实时交互。本项目是一个基于Socket架构的C/S(客户端/服务器)模式的Java聊天室,提供了基本的聊天功能...
3. **Socket编程**:Java中的Socket类是实现C/S架构的基础,它提供了在两台机器之间建立连接并交换数据的接口。在这个聊天程序中,客户端通过Socket连接到服务器,发送和接收消息。 4. **多线程**:为了实现并发...
9. **网络编程**:Java提供了Socket和ServerSocket类进行网络通信,学习网络编程需要理解TCP/IP协议的基础知识,以及如何创建客户端和服务端进行数据交换。 10. **实践应用**:理论知识结合实际项目进行练习是巩固...