OSX Wireshark 修复 No Interfaces Found
今天在研究Fiddler的替代产品的时候再次打开了WireShark发现了这个提示。大致是没有检测到任何接口,估计是权限问题,针对Mac下修改方案也算简单:
sudo chown $USER /dev/bpf*
结束。
今天在研究Fiddler的替代产品的时候再次打开了WireShark发现了这个提示。大致是没有检测到任何接口,估计是权限问题,针对Mac下修改方案也算简单:
sudo chown $USER /dev/bpf*
结束。
接下来我们开始说说TCP的问题,众所周知的,三次握手和四次挥手是核心指导方向,但对我们而言,更重要的是,我们应该知道,TCP,或者说socket有些什么问题:
粘包和拆包问题。
这是比较主要的一个问题,当然,如果我们使用了WebSocket,那么基本不需要考虑这个问题。
接下来,我们不可避免的会遇到线程同步问题,这是因为我们涉及到了共享数据的问题(也就是一个数组)。
我们来看看Python的锁:
threadLock = threading.Lock()
在同步的地方,用:
接下来我们差不多能聊起来了,剩下的就是解决上一篇中我们遗留的登出移除问题以及做一个界面,那样我们就能给更多的人用啦。
选择Tkinter,主要是,作为一个没有其他语言GUI基础的人,入门最简单粗暴的方法可能就是这个了。
关于Tkinter,网上的资源其实说不上太多,还是比较难找的,尤其是对于一个写惯了HTML/CSS的,其实是挺痛苦的。
Tkinter的布局教程可以看这里:http://effbot.org/tkinterbook/grid.htm
完成了上一个版本,我们会发现,根本聊不起来啊!
问题的关键在于,我们现在的程序,一次只能干一个事情,你让我等待输入了,我就不能好好输出了。
所以我们需要在此引入多线程的概念,多线程的概念,简单的来说,就是,我因为只有一个人,你让我去干一件事还可以,两件事我不行,那多加一个人,总可以干了。
那么阻塞呢,意思就是说:由于我干了这个,不能干那个,我们把这个现象叫做阻塞。
概念都理解了之后,我们知道了,只要多加一个线程就行了!
实现多线程有几种方法,具体来说,我们可以看一下这篇:
http://www.cnblogs.com/tqsummer/archive/2011/01/25/1944771.html
接下来我们首先略过了Python的基础,这一部分,随便找一本Python的书看看就行了,习惯了没有;
的人生之后,在必须的语句里记得加:
,基本上你就进入了Python模式。
当然,由于赶时间,这里很多可能不是最优写法,大家可以去GitHub提出=v=。
官网Demo有云:
# Echo server program
import socket
HOST = '' # Symbolic name meaning all available interfaces
PORT = 50007 # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
data = conn.recv(1024)
if not data: break
conn.sendall(data)
conn.close()
这次的操作系统课设要做聊天室,众所周知的是,Node.js家有强大的socket.io,官网的demo就能让你分分钟速写聊天室——但是并没有什么卵用。
从操作系统的角度,我们决定从底层出发,去挖掘一下究竟一个轮子是怎么样实现的。
首先先决条件,我们需要学习:
目标是最快的速度学习并实现我们的一个简单而且比较稳定的聊天室。
我们首先先来简单的了解一下Socket的模式:一个Client与一个Server建立连接,那么多个Client的情况,就需要把Server作为转发器来进行消息的转发,然后由Server推送到另一个Client中。
在GitHub中有完整的代码,接下来的介绍也是按照我的版本迭代顺序来的=v=:https://github.com/csvwolf/sky-chatting-room