浅谈Java实现一个聊天软件

这是一个Java聊天系统(项目地址:https://github.com/netcan/Talk),作为Java实验课的内容,目前已基本完成,支持如下功能:

  • 群聊
  • 私聊
  • 消息提醒
  • 用户状态标记
  • 聊天记录保存
  • 表情支持

阅读更多

《The Linux Programming Interface》第四章文件IO通用模型练习

实现tee

The tee command reads its standard input until end-of-file, writing a copy of the input to standard output and to the file named in its command-line argument. (We show an example of the use of this command when we discuss FIFOs in Section 44.7.) Implement tee using I/O system calls. By default, tee overwrites any existing file with the given name. Implement the –a command-line option (tee –a file), which causes tee to append text to the end of a file if it already exists. (Refer to Appendix B for a description of the getopt() function, which can be used to parse command-line options.)

tee能够从标准输入读入,然后输出同样内容到标准输出,同时也会写到指定的文件中。如果文件存在那么就覆盖,若指定了-a选项,那么就追加内容到文件尾。

阅读更多

《The Linux Programming Interface》第三章系统概述练习

When using the Linux-specific reboot() system call to reboot the system, the second argument, magic2, must be specified as one of a set of magic numbers (e.g., LINUX_REBOOT_MAGIC2 ). What is the significance of these numbers? (Converting them to hexadecimal provides a clue.)

阅读更多

编译原理实验之LR(1)分析器设计

终于做完第三个实验了,代码地址:https://github.com/netcan/compilingTheory,项目地址:http://115.159.147.250:666/LR/第一次进入需要加载库,比较耗时,请耐心等待,效果图:
https://raw.githubusercontent.com/netcan/compilingTheory/master/LR.gif

阅读更多

编译原理实验之LL(1)语法分析器设计

编译原理第二个实验是LL(1)语法分析,这里我来写一下关于LL(1)的内容,虽然书上都有,但是总结一遍,应该印象更加深刻的,也有助于写代码。目前LL(1)实验已全部完成,项目地址:http://115.159.147.250:666/LL1/,代码地址:https://github.com/netcan/compilingTheory,效果图:
https://raw.githubusercontent.com/netcan/compilingTheory/master/ll1.gif

阅读更多

编译原理之词法分析器设计

这两天把编译原理词法分析实验提前给做了,作品地址:http://115.159.147.250:666/Lexical/,源码:https://github.com/netcan/compilingTheory,效果图:
https://raw.githubusercontent.com/netcan/compilingTheory/master/lexical.gif

阅读更多

ssh隧道反向代理实现内网到公网端口转发

缘由

我写这篇文章,可以解决如下问题:在内网主机运行网站,无公网ip所以只能内网访问。但是主机内网可以访问外网,外网无法访问内网,现在我要做的就是通过反向代理,访问公网ip就能访问到内网主机网站,只需要一台vps

以下我都会用8080端口来转发,因为我的80端口被占用了。

阅读更多

Linux POSIX信号量解决经典进程同步问题

之前我写了一篇博文:操作系统之进程同步,关于多进程(线程)同步的问题,这里我来继续扩展下主题,如何使用信号量来解决进程之间的同步问题,不过我接下来实现还是使用线程,理由很简单我之前说过了。

在Unix/Linux上,信号量有2种标准:System VPosix。我选择了Posix,因为它的接口很简单,功能又和System V相近。

不过有些情况可以用互斥体来实现,信号量有时候称为并发式编程的goto,因为它能在一个进程中唤醒另一个进程,很容易产生出糟糕的同步设计。

阅读更多