现在的位置: 首页 > 综合 > 正文

linux网络编程入门——基于socket的proxy

2013年08月19日 ⁄ 综合 ⁄ 共 1377字 ⁄ 字号 评论关闭

学习Linux 网络编程有一段时间了,作为一个总结,写一个基于socket的proxy,算是复习前面的所学。

一直以来就有一个写proxy的想法,实验室项目中我所负责的模块就是一个Http proxy,用的时开源的PAW,是用java写的,一直想用C++/C改写一个,杯具的是,我一直没有下定决心去写。其实主要还是自己技术太菜鸟了,哎……

为了安慰一下自己,写一个基于socket的proxy吧,主要是简单实现,代码又少,又不需要看HTTP协议RFC(懒人的借口)。

 

这个基于socket的proxy已经上传至:http://codechina.net/source/1767390

使用方法:

(1)./socket_proxy/proxy:这是proxy的实现代码,编译后可执行文件位proxy

           [clearriver@localhost proxy]$ ./proxy  proxy_port    remote_host    remote_port

          参数:

                     proxy_port : proxy的公共端口号

                      remote_host:远端服务器的主机名(IP地址)

                      remote_port:远端服务器的公共端口号

           在我本机上运行(没有在远程机器上实验,如有问题,请指正)

           [clearriver@localhost proxy]$ ./proxy 8888 localhost 9999

  (2)./socket_proxy/test_proxy:这里提供了用于测试proxy的简单的“echo 程序”的客户端和服务器

              客户端:[clearriver@localhost test_proxy]$ ./client  proxy_ip  proxy_port

                      我本机的运行:[clearriver@localhost test_proxy]$ ./client 127.0.0.1 8888

                服务器:[clearriver@localhost test_proxy]$ ./server  port

                        我本机的运行:[clearriver@localhost test_proxy]$ ./server 9999

 

实现中遇到的两点ugly的错误:

(1)三个进程通信时“字节序”的问题:一定要统一(最好都用网络字节序)

  (2)写自己的daemon_init时,按照UNP1中的例子来写,一定要注意调用它的位置,必须在代开proxy 的socket之前调用,因为在这个函数里面close了所有的fd。而库函数daemon却没有上述问题。

 

PS1:在调试过程中学习了一点通过gdb调式多进程程序的小技巧,之前转贴别人的,呵呵~~~

PS2:上述只是对学习知识的总结。但我感觉这个例子涉及到了基本的网络编程的知识,从连接建立到数据收发,包括简单的编程模型(fork子进程,select/pselect多路I/O复用),还有简单的信号处理,socket选项设置,感觉作为网络编程入门熟悉一下挺好的。

 

 

 

 

抱歉!评论已关闭.