小弟最近从网站上下了一个JICQ 可是不知道怎么回事

Java即时通信工具(JICQ)设计文档(PPT)源码整理 立即下载
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 小弟最近从网站上下了一个JICQ 可是不知道怎么回事,编译时没有问题!!就是运行不了!! 请各位高手指教!!! 谢谢!!!!!!!!!!!!!!! 分New.java Server.java MainWin.java Register.java 1.//New.java如下 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.io.*; public class New extends JFrame {//登录窗口类 JPanel contentPane; //***************** String server;//服务器名 int serport;//端口 private Socket socket; private BufferedReader in;//输入输出流 private PrintWriter out; //***********//程序界面 JPanel jPanel1 = new JPanel(); JLabel jLabel1 = new JLabel(); JLabel jLabel2 = new JLabel(); JTextField jicq = new JTextField(); JLabel jLabel3 = new JLabel(); JPasswordField password = new JPasswordField(); JPanel jPanel2 = new JPanel(); JButton login = new JButton(); JButton newuser = new JButton(); JButton quit = new JButton(); JLabel jLabel6 = new JLabel(); JTextField servername = new JTextField(); JLabel jLabel7 = new JLabel(); JTextField serverport = new JTextField(); public New() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); server=servername.getText().toString().trim(); serport=Integer.parseInt(serverport.getText().trim()); } catch(Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(null); this.setResizable(false); this.setSize(new Dimension(344, 245)); this.setTitle("New JICQ"); //contentPane.add(text, null); jPanel1.setBounds(new Rectangle(2, 3, 348, 110)); jPanel1.setLayout(null); jLabel1.setText("请输入你的信息"); jLabel1.setBounds(new Rectangle(5, 7, 103, 18)); jLabel2.setText("你的Jicq"); jLabel2.setBounds(new Rectangle(7, 66, 58, 18)); jicq.setBounds(new Rectangle(68, 65, 97, 22)); jLabel3.setText("你的密码"); jLabel3.setBounds(new Rectangle(173, 66, 67, 18)); password.setBounds(new Rectangle(237, 63, 94, 22)); jPanel2.setBounds(new Rectangle(8, 154, 347, 151)); jPanel2.setLayout(null); login.setText("登录"); login.setBounds(new Rectangle(5, 27, 79, 29)); login.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(MouseEvent e) { login_mouseClicked(e); } }); newuser.setText("新建"); newuser.setBounds(new Rectangle(118, 28, 79, 29)); newuser.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(MouseEvent e) { newuser_mouseClicked(e); } }); quit.setText("退出"); quit.setBounds(new Rectangle(228, 26, 79, 29)); quit.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(MouseEvent e) { quit_mouseClicked(e); } }); jLabel6.setText("服务器"); jLabel6.setBounds(new Rectangle(20, 132, 41, 18)); servername.setText("hg"); servername.setBounds(new Rectangle(73, 135, 102, 22)); jLabel7.setText("端口"); jLabel7.setBounds(new Rectangle(191, 137, 41, 18)); serverport.setText("8080"); serverport.setBounds(new Rectangle(241, 131, 90, 30)); contentPane.add(jPanel1, null); jPanel1.add(jLabel1, null); jPanel1.add(jLabel2, null); jPanel1.add(jicq, null); jPanel1.add(jLabel3, null); jPanel1.add(password, null); contentPane.add(jPanel2, null); jPanel2.add(login, null); jPanel2.add(quit, null); jPanel2.add(newuser, null); contentPane.add(jLabel6, null); contentPane.add(servername, null); contentPane.add(jLabel7, null); contentPane.add(serverport, null); } protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } public static void main(String[] args) {//主程序 New f=new New(); f.setVisible(true); } void login_mouseClicked(MouseEvent e) {//登录按扭 try{Socket socket=new Socket(InetAddress.getByName(server),serport);//连接服务器 BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out=new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true); out.println("login");//告诉服务器我要登录 out.println(jicq.getText()); out.println(password.getPassword()); String str=" "; //do{ str=in.readLine().trim();//从服务器读取消息 //如果失败就告诉出错 if(str.equals("false")) JOptionPane.showMessageDialog(this,"对不起,出错了:-(","ok",JOptionPane.INFORMATION_MESSAGE); else{//如果成功就打开主程序 this.dispose(); int g=Integer.parseInt(jicq.getText()); MainWin f2=new MainWin(g,server,serport); f2.setVisible(true); } //System.out.println("/n"); //}while(!str.equals("ok")); }catch(IOException e1){} } void newuser_mouseClicked(MouseEvent e) {//新建用户按纽 this.dispose(); JDialog d=new Register(server,serport);//打开新建窗口 d.pack(); d.setLocationRelativeTo(this); d.setSize(400,400); d.show(); } void quit_mouseClicked(MouseEvent e) {//关闭按扭 this.dispose(); System.exit(0); } } 2.//Register.java如下 import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.net.*; import java.io.*; import javax.swing.border.*; public class Register extends JDialog {//新建用户类 //以下创建程序界面 JPanel panel1 = new JPanel(); JLabel jLabel1 = new JLabel(); JTextField nickname = new JTextField(); JLabel jLabel2 = new JLabel(); JLabel jLabel3 = new JLabel(); JPasswordField password = new JPasswordField(); JLabel jLabel4 = new JLabel(); JTextField email = new JTextField(); JLabel jLabel5 = new JLabel(); JLabel jLabel6 = new JLabel(); JTextPane info = new JTextPane(); JButton jButton1 = new JButton(); JButton jButton2 = new JButton(); JLabel jLabel7 = new JLabel(); JRadioButton boy = new JRadioButton(); JRadioButton girl = new JRadioButton(); JLabel jLabel8 = new JLabel(); JComboBox place = new JComboBox(); JComboBox headpic = new JComboBox(); //*************************** private String[] pics = new String[] {//头像 "1.jpg", "3.jpg", "5.jpg", "7.jpg"}; String sername;//服务器名 int serverport;//服务器端口 public Register(String s,int port) {//构造函数 sername=s; serverport=port; try { jbInit();//创建窗口 pack(); } catch(Exception ex) { ex.printStackTrace();} //this(null, "", true); } void jbInit() throws Exception {//创建窗口 panel1.setLayout(null); this.getContentPane().setLayout(null); panel1.setMaximumSize(new Dimension(200, 200)); panel1.setMinimumSize(new Dimension(200, 100)); panel1.setBounds(new Rectangle(-2, 0, 419, 452)); this.setTitle("register"); jLabel1.setText("昵称"); jLabel1.setBounds(new Rectangle(9, 45, 41, 18)); nickname.setBounds(new Rectangle(50, 44, 128, 22)); jLabel2.setText("请填写以下内容"); jLabel2.setBounds(new Rectangle(9, 9, 103, 18)); jLabel3.setText("密码"); jLabel3.setBounds(new Rectangle(200, 44, 41, 18)); password.setBounds(new Rectangle(247, 42, 100, 22)); jLabel4.setText("电子邮件"); jLabel4.setBounds(new Rectangle(2, 102, 58, 18)); email.setBounds(new Rectangle(55, 96, 124, 22)); jLabel5.setText("头像"); jLabel5.setBounds(new Rectangle(193, 96, 51, 18)); //*************** ComboBoxModel model = new HeadPicCombobox(pics); ListCellRenderer renderer = new HeadpicCellRenderer(); jLabel6.setText("个人资料"); jLabel6.setBounds(new Rectangle(6, 189, 87, 18)); info.setBounds(new Rectangle(5, 208, 363, 103)); jButton1.setText("确定"); jButton1.setBounds(new Rectangle(147, 330, 79, 29)); jButton1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(MouseEvent e) { jButton1_mouseClicked(e); } }); jButton2.setText("取消"); jButton2.setBounds(new Rectangle(260, 329, 79, 29)); jLabel7.setText("性别"); jLabel7.setBounds(new Rectangle(9, 156, 41, 18)); boy.setText("男"); boy.setBounds(new Rectangle(43, 152, 38, 26)); girl.setText("女"); girl.setBounds(new Rectangle(80, 152, 36, 26)); jLabel8.setText("来自"); jLabel8.setBounds(new Rectangle(147, 154, 41, 18)); place.setToolTipText(""); place.addItem("四川"); place.addItem("重庆"); place.setBounds(new Rectangle(181, 153, 163, 22)); headpic.setBounds(new Rectangle(249, 91, 71, 28)); headpic.setModel(model); headpic.setRenderer(renderer); this.getContentPane().add(jButton1, null); this.getContentPane().add(panel1, null); panel1.add(jLabel2, null); panel1.add(jLabel1, null); panel1.add(nickname, null); panel1.add(jLabel3, null); panel1.add(password, null); panel1.add(jLabel4, null); panel1.add(email, null); panel1.add(jLabel5, null); panel1.add(info, null); panel1.add(jButton2, null); panel1.add(jLabel6, null); panel1.add(jLabel7, null); panel1.add(boy, null); panel1.add(jLabel8, null); panel1.add(girl, null); panel1.add(place, null); panel1.add(headpic, null); } void jButton1_mouseClicked(MouseEvent e) { try{ System.out.println(sername); System.out.println(serverport); Socket socket=new Socket(InetAddress.getByName(sername),serverport);//连接服务器 BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out=new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true); out.println("new");//发送新建用户请求 out.println(nickname.getText().trim());//发送呢称等信息 out.println(password.getPassword()); out.println(email.getText().trim()); out.println(info.getText().trim()); out.println(place.getSelectedItem()); out.println(headpic.getSelectedIndex());//head picindex int no; no=Integer.parseInt(in.readLine()); System.out.print(no); String str=" "; //do{ str=in.readLine().trim();//从服务器读取信息 //如果出错 if(str.equals("false")) JOptionPane.showMessageDialog(this,"对不起,出错了:-(","ok",JOptionPane.INFORMATION_MESSAGE); else{//如果成功就告诉用户其号码 JOptionPane.showMessageDialog(this,"your javaicq#is" no,"ok",JOptionPane.INFORMATION_MESSAGE); this.dispose();//并打开主窗口 MainWin f2=new MainWin(no,sername,serverport); f2.setVisible(true);} //System.out.println("/n"); //}while(!str.equals("ok")); // socket.close(); }catch(IOException e1){} } } class HeadPicCombobox extends DefaultComboBoxModel {//头象列表类 public HeadPicCombobox(String[] pics) { for(int i=0; i < pics.length; i) { addElement(new Object[] { new ImageIcon(pics[i]) } ); } } public Icon getIcon(Object object) { Object[] array = (Object[])object; return (Icon)array[0]; } } class HeadpicCellRenderer extends JLabel implements ListCellRenderer { private Border lineBorder = BorderFactory.createLineBorder(Color.red, 2), emptyBorder = BorderFactory.createEmptyBorder(2,2,2,2); public HeadpicCellRenderer() { setOpaque(true); } public Component getListCellRendererComponent(JList list,Object value,int index,boolean isSelected,boolean cellHasFocus) { HeadPicCombobox model =(HeadPicCombobox)list.getModel(); setIcon(model.getIcon(value)); if(isSelected) { setForeground(list.getSelectionForeground()); setBackground(list.getSelectionBackground()); } else { setForeground(list.getForeground()); setBackground(list.getBackground()); } if(cellHasFocus) setBorder(lineBorder); else setBorder(emptyBorder); return this; } } 3.//MainWin.java如下 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import java.util.Vector; import java.net.*; import java.io.*; class FindFriend2 extends JFrame {//查找好友类 JLabel jLabel1 = new JLabel(); JButton find2 = new JButton(); JButton jButton1 = new JButton(); JButton jButton2 = new JButton(); JButton jButton3 = new JButton(); JList list2; ///////////////////以下是好友的呢称,性别等信息 Vector nickname=new Vector(); Vector sex=new Vector(); Vector place=new Vector(); Vector jicq=new Vector(); Vector ip=new Vector(); Vector pic=new Vector(); Vector status=new Vector(); Vector emails=new Vector(); Vector infos=new Vector(); //以下临时保存好友的呢称,性别等信息 Vector tmpjicq=new Vector();//jicqid Vector tmpname=new Vector();//jicqname Vector tmpip=new Vector();//ip Vector tmppic=new Vector();//pic info Vector tmpstatus=new Vector();//status Vector tmpemail=new Vector(); Vector tmpinfo=new Vector(); //以下创建网络相关变量 Socket socket; BufferedReader in; PrintWriter out; int myid; String serverhost; int servport; DatagramPacket sendPacket; DatagramSocket sendSocket; int sendPort=5000; ////////////////// JPopupMenu findmenu = new JPopupMenu(); JMenuItem look = new JMenuItem(); JMenuItem add = new JMenuItem(); public FindFriend2(int whoami,String host,int port) {//查找好友类构造函数 enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { serverhost=host; servport=port; myid=whoami; jbInit(); } catch(Exception e) { e.printStackTrace(); }//以下与服务器连接 try{socket=new Socket(InetAddress.getByName(serverhost),servport); in=new BufferedReader(new InputStreamReader(socket.getInputStream())); out=new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true); sendSocket=new DatagramSocket(); }catch(IOException e1){} } private void jbInit() throws Exception {//以下是程序界面 jLabel1.setText("下面是在线的朋友"); jLabel1.setBounds(new Rectangle(11, 11, 211, 18)); this.getContentPane().setLayout(new FlowLayout()); find2.setText("查找"); find2.setBounds(new Rectangle(8, 289, 79, 29)); find2.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(MouseEvent e) { find2_mouseClicked(e); } }); jButton1.setText("next"); jButton1.setBounds(new Rectangle(110, 288, 79, 29)); jButton2.setText("up"); jButton2.setBounds(new Rectangle(211, 285, 79, 29)); jButton3.setText("cancel"); jButton3.setBounds(new Rectangle(317, 289, 79, 29)); // nickname=new Vector(); // sex=new Vector(); // place=new Vector(); ListModel model=new FindListModel(nickname,sex,place);//列表模型 ListCellRenderer renderer=new FindListCellRenderer(); list2=new JList(model); list2.setSize(200,200); list2.setBackground(new Color(255, 255, 210)); list2.setAlignmentX((float) 1.0); list2.setAlignmentY((float) 1.0); list2.setCellRenderer(renderer); list2.setVisibleRowCount(7); list2.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(MouseEvent e) { list2_mousePressed(e); } }); look.setText("查看资料"); add.setText("加为好友"); add.addMouseListener(new java.awt.event.MouseAdapter() { public void mousePressed(MouseEvent e) { add_mousePressed(e); } }); this.getContentPane().add(jLabel1, null); this.getContentPane().add(new JScrollPane(list2)); this.getContentPane().add(find2, null); this.getContentPane().add(jButton1, null); this.getContentPane().add(jButton2, null); this.getContentPane().add(jButton3, null); findmenu.add(look); findmenu.add(add); }//以下是关闭本窗口 protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { //this.dispose(); this.hide(); } } //以下向服务器发送查找好友请求 void find2_mouseClicked(MouseEvent e) { out.println("find"); DefaultListModel mm=(DefaultListModel)list2.getModel(); /////////////////find friend info try{ String s=" "; //从服务器读取好友信息 do{ s=in.readLine(); if(s.equals("over")) break; nickname.add(s); sex.add(in.readLine()); place.add(in.readLine()); ip.add(in.readLine()); emails.add(in.readLine()); infos.add(in.readLine()); }while(!s.equals("over")); /////////////end find info //read their jicqno int theirjicq,picinfo,sta; for(int x=0;x=friendnames.size()){ fromunknow=true;//收到陌生人的消息 JOptionPane.showMessageDialog(this,"收到陌生人" infofromip "的消息","ok",JOptionPane.INFORMATION_MESSAGE); } }while(index4
Java即时通信工具(JICQ) JICQ――Java即时通讯工具――――供广大网友赏析 (0.61更新与补充说明版本说明)近来忽闻,我的JICQ在优快云上得到发布,惊喜之余,深表惭愧。喜的是:真没想到,我的JICQ居然会在优快云的首页上出现。愧的是:我的QQ还有诸多功能尚未完善,却得到广大网友的错爱。这些将是我继续完善我的JICQ的强大动力!今天发布一些关于JICQ在使用的注意事项、补充说明、与一个更新版本(0.61)。我的JICQ其实已经被我改动了一下,让它更合理一些。只是由于一些原因,没有及时发布,我现在马上发布到优快云上。改动如下:1. 我已经去掉了JMF,那个东西太大了,本来只有几百K的程序因为它,一下子变成了接近2兆,对广大拨号上网的用户来说,实在太可怕了。2. 对JICQServer启动命令行做了改动(在注意事项中说明)。补充说明:1. 关于跨平台能力:这本来是我用Java写这个ICQ工具的初衷,但由于本人只熟悉Windows平台,对其他系统不了解,虽然编译出了程序,但也不知道怎样来测试,如果有网友给与提供相关信息,我将感激不尽。虽然我使用的SQL Server2000,但我的数据库结构比较简单,对数据库的查询使用的也是标准SQL――也是为了将来跨平台更容易些,所以可以使用其他数据库系统,我没试过,但我想应该可以。2. 关于未完善之功能:由于时间、心情等原因,JICQ尚未完善,但毕竟已见雏形,我写这个东西,也只是一个偶然的机会,我现在正在考虑公开其代码。3. 关于公开代码:我打算将源代码与完整的设计文档共享,以供广大网友学习Java使用。只是,现在时机尚未成熟,我也希望尽快给大家一个惊喜。4. 关于Bug问题由于时间较短,许多细节没有完善,不是我没有能力去写,只是现在太忙,没有精力。对于不完善的地方,请大家多多包涵。未完成之功能请参考提示1、2。现仍寻求提示2中的解决方案。注意事项:1. 服务器端JICQ数据库,我采用的是MS SQL Server2000,数据库名称为JavaICQ,ODBC数据源名称为JavaICQ。2. 服务器端JICQ启动命令行:JICQServer <用户名> <密码>用户名与密码分别为数据库系统的有效用户与密码例:JICQServer sa 123客户端JICQ需要在JVM或者JDK1.3.1的版本,千万不要在1.4.0的版本上运行,因为我发现在1.4.0以上运行Swing界面不好用。提示1:未完成之功能列表(不是我不想写,只是没时间)。1. 不支持“黑名单”功能。2. 添加好友时,不向对方反馈消息,不提供身份校验。3. 离线消息收发。4. 聊天记录的管理。5. 个人信息的管理等。提示2:寻找解决方案1. 服务器端JICQ的管理功能,比如系统管理员的日常维护、信息发布等功能。2. 消息的加密措施,防止非法用户的恶意破解。3. 客户端JICQ的本地聊天记录文件管理,希望能够找到安全性较高,效率也比较高的库管理方式。Snowing Ximen2003-7-29SnowingXimen@163.com 立即下载

相关推荐

基于Java的网络聊天系统JICQ设计文档

以Java语言为实现的网络即时通信工具,包括服务器端和客户端,可以在企业内部网络和互联网上运行。使用JICQ可以和好友进行交流,信息即时发送,即时回复,传输文件等功能。 本系统充分利用了Java语言的平台无关性等众多优点,主要采用了Socket网络编程接口、多线程、输入输出流、Swing界面编程技术,为我们构建一个跨平台的真正畅通的网络信息交换工具 。

毕设 JAVA JSP 简单的OICQ聊天程序论文

Java是当前比较流行的开发语言之一,它有着自己的易用特点与性能优势,比如跨平台、安全性、多线程、网络Socket编程、数据流概念等方面,因此通过对开源即时通讯LinuxQQ的研究和分析,基于Java语言和J2SE规范设计了一个即时通讯工具JICQ (Java for I seek you),并对其体系结构、构成模块及系统关键技术进行了分析与设计。作为开发工具,在开发过程中用到了时下流行的重构开发方法,优化了系统的设计。系统具有安全、高效、实用、支持在不同系统平台运行等特点。服务端单线程上线处理代码。

bysj211cn的博客 306

jicq src java

jicq-src

基于java一个简单的即时通讯工具的设计与开发(毕设+实现+源码+数据库)

一个简单的即时通讯工具的设计与开发摘 要即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出不穷;服务提供商也提供了越来越丰富的通讯服务功能。Java是当前比较流行的开发语言之一,它有着自己的易用特点与性能优势,比如跨平台、安全性、多线程、网络Socket编程、数据流概念等方面,因此通过对开源即时通讯LinuxQQ的研究和分析,基于Java语言和J2EE规范设计了一个即时通讯工具JICQ (Java for I seek you),并对其体

weixin_43658371的博客 1444

JICQ2007 part04

前阵子由于比较忙,所以忘了把源代码发布上去,这次为了共享的目的把源代码都发上去,希望喜欢JAVA的朋友能够互相交流,该系统完全用java语言实现,由于那时毕业设计时间比较紧,只用了3-4周的时间,加上人手、技术的问题,还有一些功能和BUG没有处理好,在这段比较短的时间甚至于有一些安全问题都没有考虑很好,但是作为一个网上即时通讯工具,已经基本完成其功能,比如好友聊天、JICQ群聊天、语音聊天、屏幕切图、五子棋游戏、最近联系人、聊天记录等都已经完成并且附有详细的代码,尤其是界面,也算是做的比较漂亮,我知道网上很多朋友都在寻找这方面的代码,故而将这代码共享,也希望有些朋友能够将它完善.我最近比较忙可能也算比较懒没有将它的客户端再次打包。运行该系统需要先安装好SQL补丁以及JDBC驱动,如果有疑问可以联系我的171984561

Java即时通信工具(JICQ)

JICQ——Java即时通讯工具 ————供广大网友赏析 (0.61更新与补充说明版本说明) 近来忽闻,我的JICQ在优快云上得到发布,惊喜之余,深表惭愧。喜的是:真没想到,我的JICQ居然会在优快云的首页上出现。愧的是:我的QQ还有诸多功能尚未完善,却得到广大网友的错爱。这些将是我继续完善我的JICQ的强大动力! 今天发布一些关于JICQ在使用的注意事项、补充说明、与一个更新版本(0.61)。 我的JICQ其实已经被我改动了一下,让它更合理一些。只是由于一些原因,没有及时发布,我现在马上发布到优快云上。 改动如下: 1. 我已经去掉了JMF,那个东西太大了,本来只有几百K的程序因为它,一下子变成了接近2兆,对广大拨号上网的用户来说,实在太可怕了。 2. 对JICQServer启动命令行做了改动(在注意事项中说明)。 补充说明: 1. 关于跨平台能力:这本来是我用Java写这个ICQ工具的初衷,但由于本人只熟悉Windows平台,对其他系统不了解,虽然编译出了程序,但也不知道怎样来测试,如果有网友给与提供相关信息,我将感激不尽。 虽然我使用的SQL Server2000,但我的数据库结构比较简单,对数据库的查询使用的也是标准SQL——也是为了将来跨平台更容易些,所以可以使用其他数据库系统,我没试过,但我想应该可以。 2. 关于未完善之功能:由于时间、心情等原因,JICQ尚未完善,但毕竟已见雏形,我写这个东西,也只是一个偶然的机会,我现在正在考虑公开其代码。 3. 关于公开代码:我打算将源代码与完整的设计文档共享,以供广大网友学习Java使用。只是,现在时机尚未成熟,我也希望尽快给大家一个惊喜。 4. 关于Bug问题 由于时间较短,许多细节没有完善,不是我没有能力去写,只是现在太忙,没有精力。对于不完善的地方,请大家多多包涵。未完成之功能请参考提示1、2。 现仍寻求提示2中的解决方案。 注意事项: 1. 服务器端JICQ数据库,我采用的是MS SQL Server2000,数据库名称为JavaICQ,ODBC数据源名称为JavaICQ。 2. 服务器端JICQ启动命令行: JICQServer 用户名与密码分别为数据库系统的有效用户与密码 例:JICQServer sa 123 客户端JICQ需要在JVM或者JDK1.3.1的版本,千万不要在1.4.0的版本上运行,因为我发现在1.4.0以上运行Swing界面不好用。 提示1:未完成之功能列表(不是我不想写,只是没时间)。 1. 不支持“黑名单”功能。 2. 添加好友时,不向对方反馈消息,不提供身份校验。 3. 离线消息收发。 4. 聊天记录的管理。 5. 个人信息的管理等。 提示2:寻找解决方案 1. 服务器端JICQ的管理功能,比如系统管理员的日常维护、信息发布等功能。 2. 消息的加密措施,防止非法用户的恶意破解。 3. 客户端JICQ的本地聊天记录文件管理,希望能够找到安全性较高,效率也比较高的库管理方式。

JICQ――Java即时通讯工具(0.6.1)

JICQ――Java即时通讯工具――――供广大网友赏析(0.6.1更新与补充说明版本说明)今天发布一些关于JICQ在使用的注意事项、补充说明、与一个更新版本(0.6.1)。我的JICQ其实已经被我改动了一下,让它更合理一些。只是由于一些原因,没有及时发布,我现在马上发布到优快云上。改动如下:1.  我已经去掉了JMF,那个东西太大了,本来只有几百K的程序因为它,一下子变成了接近2兆,对广大拨号上

CiCi的专栏 2138

不止于使能:用汇川PLC功能块封装,实现伺服轴状态管理与安全逻辑

本文深入探讨了汇川PLC功能块封装在伺服轴控中的应用,详细介绍了如何通过高级封装技术实现伺服轴的状态管理与安全逻辑。文章涵盖了从基础使能到全生命周期监控的进化,多轴协同的实例化管理策略,以及安全逻辑的防御性编程技巧,为工业自动化领域的工程师提供了实用的解决方案和最佳实践。

weixin_28684825的博客 273

0.4 文件与文件夹:数据是怎么存放的,一篇讲清目录树

电脑里几万个文件怎么归类?本文讲清文件是有名字的数据单位、文件夹(目录)是可层层嵌套的收纳容器,二者共同构成目录树,最顶层是根目录;建立字节/KB/MB/GB 的大小直觉,介绍 Linux 一切皆文件的设计;用一张表讲清复制、移动、重命名、删除的区别,以及 Delete 进回收站、Shift+Delete 永久删除的差异;最后从安全视角讲文件上传(伪装脚本上传即 WebShell)与路径穿越(ZipSlip 把文件写到敏感位置),提醒凡是文件读写都要警惕路径被操纵。

一个安全白帽子的成长记录:Web 安全、漏洞复现、内网渗透。完整目录在 gysec.top 249

VMware Workstation Pro必备技巧:5分钟搞定Ubuntu虚拟机磁盘瘦身(附常见错误解决)

本文详细介绍了如何为VMware Workstation Pro中的Ubuntu虚拟机进行磁盘瘦身,解决.vmdk文件只增不减的问题。通过清理系统垃圾、使用零填充空闲空间,并利用vmware-toolbox-cmd或vmware-vdiskmanager工具进行压缩,可有效回收被无效占用的磁盘空间。文章还提供了常见错误解决方案和预防性维护建议,帮助用户高效管理虚拟机存储。

sea99的博客 299

Windows下Python多版本共存与切换的终极指南(含环境变量详解)

本文详细解析了在Windows系统下实现Python多版本共存与切换的完整方案。通过深入讲解环境变量Path的底层机制,提供了从安装策略、精细化Path管理到创建快速切换脚本的实战指南,并介绍了py启动器和虚拟环境等高级技巧,帮助开发者彻底解决版本冲突问题,提升开发效率。

v6b7n8m9q0的博客 538

LangGraph 本地 build 频频翻车,最终在服务器跑通流式对话

先说结论:我本地那个,一次都没成功过。三次,三次,全挂在拉镜像上。而顺得像刚上过油。这就很像我高中那辆自行车:骑着能走,一上锁就坏。那天晚上我盯着终端里那行红字看了很久,想的不是技术方案,想的是——为什么同一个工具,可以一边让我觉得自己很行,一边让我觉得自己不太行。

人工智能AI技术 319

告别城市峡谷定位漂移:手把手教你用PSINS仿真INS/NHC/ODO组合导航(附代码获取)

本文详细解析了INS/NHC/ODO组合导航系统在城市峡谷环境中的应用,通过PSINS平台实现精准定位。文章涵盖核心原理、环境搭建、算法实现及性能优化,帮助开发者解决GNSS信号中断时的定位漂移问题,提升自动驾驶系统在复杂环境中的可靠性。

weixin_30329623的博客 430

自建 Git 服务器和裸仓库差在哪:要能提合并请求

在一台 Linux 上 git init --bare 就能自建 Git 服务器,但它只能推拉代码,没有网页、合并请求、评审和按仓库分配的权限。对照裸仓库和 AngusGit 各自能做什么,再走一遍在 AngusGit 上发起合并请求的最短路径,以及已有裸仓库怎么完整搬过来。

AngusTester 331

《BiLSTM with Multi-Polarity Orthogonal Attention for Implicit Sentiment Analysis》论文阅读笔记

文章名:《BiLSTM with Multi-Polarity Orthogonal Attention for Implicit Sentiment Analysis》 作者Jiyao Wei a,1, Jian Liaoa,1, Zhenfei Yanga, Suge Wanga,b,∗, Qiang Zhaoa 年份 2019 1 Introduction 目前文本情感分析多分析带...

weixin_39036944的博客 1631

Python+OpenCV实战:雨天车牌识别准确率提升300%的5个关键技巧

本文针对雨天车牌识别准确率骤降的难题,分享了五个基于Python和OpenCV的实战技巧。通过暗通道先验去雾、雨纹抑制、光照不变量颜色空间转换、多尺度自适应阈值分割以及融合传统特征与轻量级深度学习的混合识别策略,系统性地提升了算法在恶劣天气下的鲁棒性。这些方法能有效解决图像模糊、对比度低、字符断裂粘连等问题,为智能交通等实际应用提供可靠解决方案。

k8l9m0n的博客 717

VSCode_RemoteSSH_一直卡在下载服务器_解决教程

解决VSCode远程一直卡在下载服务器

m0_69395553的博客 137

北斗导航 | ILS(仪表着陆系统)、MLS(微波着陆系统)和GBAS(地基增强系统)的性能对比

最 早 的 GBAS 系 统 是 **局 域 增 强 系 统(LAAS)**,它是 1990 年由美国 Honeywell 公司 和 NASA 共 同 完 成 的 差 分 GPS(DGPS)演 变 而 来 的。1998 年,LAAS 被 ICAO 采 纳为 GBAS。2009 年 9 月 3 日 Honeywell 公 司 的GBAS 系统通过了 **CAT-I 精密进近着陆系统**的设计认证 ,而 **CAT-II 和 CAT-III 系统的研发和验证工作也正在有序的进行中**

尘世冰封的专栏 3988

Linux epoll 一篇讲透:从 select/poll 到红黑树、LT/ET,再到完整 TCP 服务器

一万个客户端已经连上服务器,眼下只有十个客户端发来了数据。服务器怎样把时间花在这十个连接上?理解这个问题,就抓住了 epoll 的主线。接下来,我们沿着“为什么需要它 → 接口怎么用 → 内核如何实现 → LT/ET 怎么写 → 完整服务器怎么运行”的顺序,把知识连起来。**阅读基础:**了解socketbindlistenaccept的基本用途即可。本文示例面向 Linux,服务器使用 C++17,实验脚本使用 Python 3。

2601_94861874的博客 439

Navicat从入门到精通:数据库管理全攻略

本文系统梳理Navicat数据库管理工具的核心应用体系。从基础的安装与多类型数据库连接入手,详解数据库与数据表的创建、修改、删除等操作逻辑;深入数据增删改查的可视化与 SQL 语句双重操作模式,结合Excel/SQL文件的导入导出场景提供实操指南。同时覆盖数据备份恢复、跨库同步等进阶功能,以及视图、存储过程等高级应用。通过对比同类工具突出Navicat的易用性与功能性优势,并针对连接失败、字符乱码等常见问题提供解决方案,帮助读者从零基础掌握数据库全生命周期管理,提升数据操作效率与安全性。

邓邓子的博客 1897

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

宝塔装在服务器上,极目装在本机,差别到底在哪

宝塔 极目 装服务器 装本机 区别,不是比谁好用,是比"软件落在谁的账上"。宝塔的端口、资源、维护都记在服务器;极目这些都落在你电脑,服务器保持和纯 SSH 管理一样的干净。想保护服务器资源和安全面,选装本机的方案;想浏览器点就完事,装服务器的面板也行。

AI_Lab01的博客 346

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

推理服务器的调度器:连续批处理与请求生命周期

推理服务器的性能上限不取决于模型,取决于调度器——同样的模型,换一个调度策略,吞吐可以差三倍。传统深度学习服务的静态批处理在 LLM 场景下完全失灵:请求的输出长度不可预知,短请求被长请求拖着浪费算力。这篇文章实现 LLM 时代的标准答案——连续批处理(continuous batching),并管理一个请求从到达到完成的完整生命周期。

2601_96733043的博客 203

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Nginx代理服务器从入门到实战:静态部署、反向代理与负载均衡全解析

本文系统讲解Nginx代理服务器:涵盖核心概念、安装启动、配置结构,静态部署与虚拟主机,正向/反向代理原理与实战,以及五种负载均衡策略,适合后端开发与运维入门学习。

Daisy0304的博客 188

把电脑变成一台“假“GNSS 设备 —— 一个蓝牙 SPP 服务器从零到联调

本文介绍如何用Qt6实现一个蓝牙SPP服务器(H11BtServer),将电脑模拟为一台可被发现的GNSS设备。该服务器支持经典蓝牙SPP协议,注册SDP服务并监听连接,响应AT命令(如AT+DEVINFO),每秒主动推送带正确校验和的NMEA帧($GNPOS/$GGA等),数据基于时间驱动正弦与随机扰动,实现位置、精度等参数动态变化。通过解析行式协议、计算校验和、严格对齐字段顺序,可在无真实硬件情况下联调RTK客户端(如rtklib SDK或手机App),完整验证数据链路。代码结构清晰,参数集中配置,易于

Hi20240217的博客 204
上一篇: 从socket中读取数据时使用超时
下一篇: Java的秘密:使用全屏幕模式
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值