使用Winsock API发送/接收UDP包

其实Winsock这堆底层API和BSD都是一样的么…… 难怪令人怀疑这个是抄袭BSD的源代码……UDP比较简单,只要bind一下,RP好的话就可以发了。先 s: = socket(AF_INET,SOCK_DGRAM,0);成功的话,s已经是一个可以用的socket了。 然后要指明绑定的addrsa:sockaddr_in;fillchar(sa,sizeof(sa),0);sa.sin_family:=AF_INET;sa.sin_port:=htons(port);sa.sin_addr.S_addr:=inet_addr(PChar(address));address为地址(a.b.c.d形式),port为端口号。而htons作用是把以主机存储方式存储的port转换为网络上通用的port形式。 接着就可以bind了bind(s,sa,sizeof(sa));成功的话,netstat -an能够看见你所bind的端口号。 bind完了,这个socket和端口也就建立了联系,所有扔到这个口的UDP包都会给这个socket 接着可以直接用recv收。但是假如没有数据过来,程序就会卡在这里,多不好……所以用WSAAsyncSelect来指明当收到包之后给窗口发消息。WSAAsyncSelect(s,form1.Handle,WM_RECEIVED,FD_READ);WM_RECEIVED自己定义,FD_READ说明只关心收到消息。 接着让窗口收到这种消息的时候运行给定的proc先定义这个proc:Procedure TForm1.OnMyMessage(var Msg:TMsg;var Handled:Boolean);然后在FormCreate的时候告诉窗口:application.OnMessage:=OnMyMessage;这样就完了 收到消息后:  if Msg.message=WM_RECEIVED then(万一不是呢……)lParam的底字节代表具体情况(我们只关心FD_READ,所以这里只会是FD_READ)高字节为出错信息wParam为收到消息的那个socket,我们这里只有s,所以其实也一样然后就可以recv了recv(Msg.wParam,data,MAXMSG,0);不出意外,消息就在data里了~ 好好处理消息吧~ 记得最后closesocket(s)哦~ 以免资源浪费~   Old Blog Link: http://computer.mblogger.cn/henryhu/posts/61586.aspx

被libc弄得晕头转向……

编译 kports,结果 configure 检查QT的时候报错,查看config.log:libqt-mt.so: undefined … __res_state我一看,又是这个…… 从前见过,但从前加了 -pthread 就好了,现在怎么不行呢?然后,去网上找,什么都没有;去 /usr/lib和/lib和/usr/local/lib grep,都没有…… 汗……于是去 /usr/src/lib/libpthread 里面找,一点都没有发现……偶尔灵机一动,想到可能在别的库里面。于是到 /usr/src/lib 里面找,结果在 /usr/src/lib/libc/resolv/res_state.c 里面找到了。既然这样,为什么 /lib/libc.so.6 里面会grep不到??尝试一下,重新编译安装libc,再试,好了!!估计是上次没有 make buildword 的结果…… 以后一定make buildworld… Old Blog Link: http://computer.mblogger.cn/henryhu/posts/61348.aspx

尝试遗传算法

看了Machine Learning里面的遗传算法,感觉比较有意思,于是我就打算用刚学的C#来试着编写一下这个不怎么熟悉的算法。 已经开始编了一周多了,框架都编好了,但是变异和杂交的子程序还没有写…… 不清楚效果如何…… 程序已经300多行了…… PS:今年分区联赛考的那个,其实只是一种杂交过程而已……  

Inside C#

这段时间有了一些空闲,先看了一段时间关于8086汇编和6502汇编的东西,后来在看《Inside C#》(学校的图书馆真不错~ 这个都有~) 看了之后,觉得C#用着很顺手,彻底的面向对象使很多东西变得简单了。现在对于C#的熟练程度估计已经超过C++了…… 昨天帮老师用C++写USACO的题目,结果被快排整了半天——先是==和=的事情,整个程序就一个地方搞混了,结果就混乱了…… 还有全局和局部变量的事情,C++定义变量太顺手了,结果一个变量全局和局部各定义了一次,出了些奇怪的事情…… 再加上VC6似乎和Standard C++不符(using namespace std会出错…… #include 竟然是#include ……),Dev-C++的调试太垃圾了,结果是连个顺手的C++环境都没有…… C#的一个很有意思的东西是foreach,从前用VB的时候这个没有好好学过,现在发现它也简化了不少操作——什么循环变量和对象数量都不用考虑了,随便一混就可以了~ 关于接口和继承,C++的情况我不清楚,C#里面的接口大概是参考了COM,反正是个定义明确,使用方便的东西。但是,关于从父类继承的函数变成了实现接口的函数这种混乱的事情…… 估计发生的机会也不大吧…… 终于在Pascal之后,系统地学习了另一门语言~ 《Inside C#》 的确是一本好书~ 把东西讲得足够清楚。 从前就听说过Inside系列不错,的确是这样~ C#里面还有很多东西,需要从实践里面才能够知道,努力学习吧~

在公交车上…… 你最不愿意碰见什么事?

在公交车上…… 你最不愿意碰见什么事? A.有人吵架且经久不息 B.遇见小学阶段之前的小孩 C.遇见正处于小学阶段的小孩 D.有人行窃 E.老人站在你面前 F.怀抱婴儿者站在你面前 G.堵车且超过30min H.有人发着异味坐在你旁边 I.其他 __________________ 可多选,但请不要超过两个~