re: tcp要点学习-建立连接[未登录] thinkinnight 2008-09-06 21:34
我试了一下,加上closesocket还是一样的结果,而且关键我觉得不是得到正确的序列,而是内部到底发生了什么造成这种结果。
刚看了TCP/IP卷一中对RST的描述,一共有三种情况:
1. 到不存在的端口的连接请求
2. 异常终止一个连接
3. 半打开连接
第一种情况下,应该是服务器向客户端发送RST。告知该端口不存在。
第二种情况,按照书上面的说法,需要置SO_LINGER,这样使得连接关闭时进行复位而不是正常的FIN,但是程序中并没有这样。可是现象倒是很符合。
第三种情况,书上也是接受方以RST作为应答,那现在也没有数据交互,而是直接出现RST,也不像。
所以只是想研究一下这种情况的原理、过程。
至于正常的情况,能做出来肯定是很好,不然反正书上那些内容也知道了,关键还是使用嘛,所以就是想对真实的现象有一些了解,我都怀疑是不是漏包了。。。但是看来看去,也只有这些
re: tcp要点学习-建立连接[未登录] thinkinnight 2008-09-04 16:41
windump是只监听到server 5001端口的通信,其他都被过滤掉了,有用的信息就这四条.
re: tcp要点学习-建立连接[未登录] thinkinnight 2008-09-04 16:01
Kevin Lynx你好, 关键是我不知道问题是出在哪里.程序是最简单的client和server, 为winsock, 代码的主要部分如下(去掉wsastartup和wsacleanup,其余socket相关代码均在下方,没有写close):
[server]
sockaddr_in server;
SOCKET s = socket(AF_INET, SOCK_STREAM, NULL);
server.sin_family = AF_INET;
server.sin_port = htons(5001);
server.sin_addr.S_un.S_addr = INADDR_ANY;
int _err = bind(s,(sockaddr *)&server, sizeof(server));
_err = listen(s,5);
SOCKET forclient = accept(s, (sockaddr *)NULL, NULL);
[client]
sockaddr_in client;
memset(&client,0,sizeof(client));
client.sin_family = AF_INET;
client.sin_port = htons(5001);
client.sin_addr.S_un.S_addr = inet_addr("192.168.0.2");
SOCKET s = socket(AF_INET,SOCK_STREAM,NULL);
int _err=connect(s, (sockaddr *)&client, sizeof(sockaddr));
windump结果(处理了一下,将ip隐藏了)
windump: listening on \Device\xxx_{xxxxxxx-xxxx-xxxx-xxxxx-xxxxxxxxxx}
15:53:20.162579 IP client.36519 > server.5001: S 36061147:360611
47(0) win 65535 <mss 1460,nop,nop,sackOK>
15:53:20.163065 IP server.5001 > client.36519: S 808783039:80878
3039(0) ack 36061148 win 65535 <mss 1460,nop,nop,sackOK>
15:53:20.163110 IP client.36519 > server.5001: . ack 1 win 65535
15:53:20.163243 IP client.36519 > server.5001: R 1:1(0) ack 1 wi
n 0
4 packets captured
26 packets received by filter
0 packets dropped by kernel
就是最后会有一个RST, ACK, 对这个不明白是为什么.
也不应该是半开端口吧.
re: tcp要点学习-建立连接[未登录] thinkinnight 2008-09-03 22:21
文章写得很好,看了之后我就自己想试了一下。结果发现自己编写的服务器、客户端在三次握手后,由客户端又向服务器发送了一个RST ACK,不知道是为什么。
服务器端并没有使用while循环,而只是一次的accept。我想原因可能在这里,但是具体的还是不清楚如何出的问题。能交流一下吗?谢谢
re: log4cplus的三个例程[未登录] thinkinnight 2007-03-31 14:41
静态lib库应该是没有问题的,就是用的sf上下下来的代码
re: log4cplus的三个例程[未登录] thinkinnight 2007-03-31 14:40
使用VC6编译,没有问题,完全可以通过,看来是VS2005对于模板的支持进行了一些改变,真是不爽
re: log4cplus的三个例程[未登录] thinkinnight 2007-03-31 10:05
在使用VS2005编译时,发现threadtest有link错误,通过观察dll文件的导出,似乎对继承自AbstractThread的TestThread无法识别,不知有何方法可以解决。
re: 使用Windows计数器的方法(c++) [未登录] thinkinnight 2007-03-30 17:02
不错,最近也要写个这样的东西来监控一些程序的时间、空间占用情况,但是不知道有没有成熟的工具,就像filemon那样的。
re: 前置++/--和后置++/--[未登录] thinkinnight 2007-03-30 08:57
一个是先计算再加,一个是加了再计算,不带计算的话,结果是一样的,不过看了实现之后,的确理解更深了些。看来是返回值的不同,如果有计算的话,是使用的返回值。
re: 养眼的编辑器配色 [未登录] thinkinnight 2007-03-26 09:56
Verdana是不错的,还有arial
我现在使用Fixedsys,据说这种字体是行间距一致的
不过就是大,一页看不到那么多代码了 :0
这篇文章不错,一直在找类似这样的探讨文章,找一个好的字体也不是一个容易的事情
呵呵,我也喜欢用vim,不过我是在win下面使用的gvim,我更喜欢使用vim的Darkblue方案,照着修改了一下,发现这个宏真好用,只用修改xml文件就可以了。因为没有搞一个上载空间,所以前天将我的颜色设置发给walkdan了