c++ socket 求高人解答

c++ socket 求高人解答,第1张

inet_addr函数是把IP地址的字符串转化为网络字节的IP地址,你要了解网络顺序地址和本机顺序地址的不同表示方法,正常的PC机intel系列的CPU是一般小端表示,而网络顺序是大端表示,相互转换用htonl或htons等函数,小端表示方法为高位放在高位,如127001二进制是01111111 00000000 00000000 00000001,小端存放时是10000000 00000000 00000000 11111110,也就是说是反着放的,大端是01111111 00000000 00000000 00000001,inet_addr转换后是后者形式,inet_ntoa也是按着后者的顺序进行转换的。inet_ntoa是怎么转换的MSDN上没有具体说明,但是知道了上面这些,想要在字符串和32位二进制数之间进行转换并不难。

首先要明白什么是可重入性?

可重入函数主要是在多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;

而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。

针对你的问题看看你的代码有没有使用全局变量或者其他的不可重入因子,

你的那个write函数把里面的参数传给标准输入,也没说明哪个进程用呀。用execl那个函数可以给另一个程序传参数(你可以再查一下execl的函数原型,看下具体怎么用),你直接把那个字符串用execl传递给那个upper程序就可以了。在upper的main()函数那改成main(int argc,char argv[]),argv[1]里的数据就是你传的字符串。 argc是传进来参数的个数,第0个argv是你的程序名,从第一个开始,就是你要传到程序里的参数了。

也可以用socket或者进程间通信来写这个程序。

首先你需要解析外部传进来的数据包,正常情况下,通信数据包的包头已经包含了数据包的源端和目的端地址。目的端地址自然是你的IP地址,而你所要做的就是对源端地址进行判断。

如果源端地址是你指定的,那就解析数据包的净载荷部分(payload),进行相应的处理;

若不是你指定的,那么就不要处理,直接丢弃就好了。

这部分设计到socket底层编程,我以前用C#编写过,完全可以实现。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12185791.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存