<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[Linux Socket编程实例(一个Hello World程序)  ]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Sun, 25 Nov 2007 02:35:30 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	在Linux下写了个小的socket程序，分为客户端和服务器端,服务端开一个端口(2000),做为一个daemon,等待客户的连接请求.一旦有客户连接,服务器端打印出客户端的IP地址和端口,并且向服务器端发送欢迎信息和时间.下面是服务端的代码(tcpserver.c).由于这只是个简单的程序，所以只用了单线程实现!<br/><br/>/**<br/><br/> * Tcp Server program, It is a simple example only.<br/><br/> * zhengsh 200520602061 2<br/><br/> * when client connect to server, send a welcome message and timestamp in server.<br/><br/> */<br/><br/> <br/><br/>#include &lt;stdio.h&gt;<br/><br/>#include &lt;sys/socket.h&gt;<br/><br/>#include &lt;unistd.h&gt;<br/><br/>#include &lt;sys/types.h&gt;<br/><br/>#include &lt;netinet/in.h&gt;<br/><br/>#include &lt;stdlib.h&gt;<br/><br/>#include &lt;time.h&gt;<br/><br/> <br/><br/>#define SERVER_PORT 20000 // define the defualt connect port id<br/><br/>#define LENGTH_OF_LISTEN_QUEUE 10 //length of listen queue in server<br/><br/>#define BUFFER_SIZE 255<br/><br/>#define WELCOME_MESSAGE &quot;welcome to connect the server. &quot;<br/><br/> <br/><br/> <br/><br/>int main(int argc, char **argv)<br/><br/>{<br/><br/> &nbsp; &nbsp; &nbsp; int servfd,clifd;<br/><br/> &nbsp; &nbsp; &nbsp; struct sockaddr_in servaddr,cliaddr;<br/><br/> <br/><br/> &nbsp; &nbsp; &nbsp; if ((servfd = socket(AF_INET,SOCK_STREAM,0)) &lt; 0)<br/><br/> &nbsp; &nbsp; &nbsp; {<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;create socket error!&#92;n&quot;);<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exit(1);<br/><br/> &nbsp; &nbsp; &nbsp; }<br/><br/> &nbsp; &nbsp; &nbsp; bzero(&amp;servaddr,sizeof(servaddr));<br/><br/> &nbsp; &nbsp; &nbsp; servaddr.sin_family = AF_INET;<br/><br/> &nbsp; &nbsp; &nbsp; servaddr.sin_port = htons(SERVER_PORT);<br/><br/> &nbsp; &nbsp; &nbsp; servaddr.sin_addr.s_addr = htons(INADDR_ANY);<br/><br/> <br/><br/> &nbsp; &nbsp; &nbsp; if (bind(servfd,(struct sockaddr*)&amp;servaddr,sizeof(servaddr))&lt;0)<br/><br/> &nbsp; &nbsp; &nbsp; {<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;bind to port %d failure!&#92;n&quot;,SERVER_PORT);<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exit(1);<br/><br/> &nbsp; &nbsp; &nbsp; }<br/><br/> <br/><br/> &nbsp; &nbsp; &nbsp; if (listen(servfd,LENGTH_OF_LISTEN_QUEUE) &lt; 0)<br/><br/> &nbsp; &nbsp; &nbsp; {<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;call listen failure!&#92;n&quot;);<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exit(1);<br/><br/> &nbsp; &nbsp; &nbsp; }<br/><br/> <br/><br/> &nbsp; &nbsp; &nbsp; while (1)<br/><br/> &nbsp; &nbsp; &nbsp; {//server loop will nerver exit unless any body kill the process<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;char buf[BUFFER_SIZE];<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;long timestamp;<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;socklen_t length = sizeof(cliaddr);<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;clifd = accept(servfd,(struct sockaddr*)&amp;cliaddr,&amp;length);<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (clifd &lt; 0)<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; printf(&quot;error comes when call accept!&#92;n&quot;);<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;strcpy(buf,WELCOME_MESSAGE);<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//inet_ntop(INET_ADDRSTRLEN,cliaddr.sin_addr,buf,BUFFER_SIZE);<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;from client,IP:%s,Port:%d&#92;n&quot;,inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;timestamp = time(NULL);<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;strcat(buf,&quot;timestamp in server:&quot;);<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;strcat(buf,ctime(&amp;timestamp));<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;send(clifd,buf,BUFFER_SIZE,0);<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;close(clifd); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br/><br/> &nbsp; &nbsp; &nbsp; }//exit<br/><br/> &nbsp; &nbsp; &nbsp; close(servfd);<br/><br/> &nbsp; &nbsp; &nbsp; return 0;<br/><br/>}<br/><br/> <br/><br/> 客户每次用一个随机的端口连接服务器,并接收来自服务器的欢迎信息<br/><br/>,然后打印出来(tcpclient).运行的时候接受一个参数,也就是服务器的ip地址.<br/><br/><br/>/* Tcp client program, It is a simple example only.<br/><br/> * zhengsh 200520602061 2<br/><br/> * connect to server, and echo a message from server.<br/><br/> */<br/><br/> <br/><br/> <br/><br/>#include &lt;stdio.h&gt;<br/><br/>#include &lt;sys/socket.h&gt;<br/><br/>#include &lt;unistd.h&gt;<br/><br/>#include &lt;sys/types.h&gt;<br/><br/>#include &lt;netinet/in.h&gt;<br/><br/>#include &lt;stdlib.h&gt;<br/><br/> <br/><br/>#define SERVER_PORT 20000 // define the defualt connect port id<br/><br/>#define CLIENT_PORT ((20001+rand())%65536) // define the defualt client port as a random port<br/><br/> <br/><br/>#define BUFFER_SIZE 255<br/><br/>#define REUQEST_MESSAGE &quot;welcome to connect the server.&#92;n&quot;<br/><br/> <br/><br/>void usage(char *name)<br/><br/>{<br/><br/> &nbsp; &nbsp; &nbsp; printf(&quot;usage: %s IpAddr&#92;n&quot;,name);<br/><br/>}<br/><br/> <br/><br/>int main(int argc, char **argv)<br/><br/>{ &nbsp; &nbsp; <br/><br/> &nbsp; &nbsp; &nbsp; int servfd,clifd,length = 0;<br/><br/> &nbsp; &nbsp; &nbsp; struct sockaddr_in servaddr,cliaddr;<br/><br/> &nbsp; &nbsp; &nbsp; socklen_t socklen = sizeof(servaddr);<br/><br/> &nbsp; &nbsp; &nbsp; char buf[BUFFER_SIZE];<br/><br/> &nbsp; &nbsp; &nbsp; <br/><br/> &nbsp; &nbsp; &nbsp; if (argc &lt; 2)<br/><br/> &nbsp; &nbsp; &nbsp; {<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;usage(argv[0]);<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exit(1);<br/><br/> &nbsp; &nbsp; &nbsp; }<br/><br/> &nbsp; &nbsp; &nbsp; <br/><br/> &nbsp; &nbsp; &nbsp; if ((clifd = socket(AF_INET,SOCK_STREAM,0)) &lt; 0)<br/><br/> &nbsp; &nbsp; &nbsp; {<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;create socket error!&#92;n&quot;);<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exit(1);<br/><br/> &nbsp; &nbsp; &nbsp; }<br/><br/> &nbsp; &nbsp; &nbsp; srand(time(NULL));//initialize random generator<br/><br/> &nbsp; &nbsp; &nbsp; bzero(&amp;cliaddr,sizeof(cliaddr));<br/><br/> &nbsp; &nbsp; &nbsp; cliaddr.sin_family = AF_INET;<br/><br/> &nbsp; &nbsp; &nbsp; cliaddr.sin_port = htons(CLIENT_PORT);<br/><br/> &nbsp; &nbsp; &nbsp; cliaddr.sin_addr.s_addr = htons(INADDR_ANY);<br/><br/> <br/><br/> &nbsp; &nbsp; &nbsp; bzero(&amp;servaddr,sizeof(servaddr));<br/><br/> &nbsp; &nbsp; &nbsp; servaddr.sin_family = AF_INET;<br/><br/> &nbsp; &nbsp; &nbsp; inet_aton(argv[1],&amp;servaddr.sin_addr);<br/><br/> &nbsp; &nbsp; &nbsp; servaddr.sin_port = htons(SERVER_PORT);<br/><br/> &nbsp; &nbsp; &nbsp; //servaddr.sin_addr.s_addr = htons(INADDR_ANY);<br/><br/> <br/><br/> &nbsp; &nbsp; &nbsp; if (bind(clifd,(struct sockaddr*)&amp;cliaddr,sizeof(cliaddr))&lt;0)<br/><br/> &nbsp; &nbsp; &nbsp; {<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;bind to port %d failure!&#92;n&quot;,CLIENT_PORT);<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exit(1);<br/><br/> &nbsp; &nbsp; &nbsp; }<br/><br/> <br/><br/> &nbsp; &nbsp; &nbsp; if (connect(clifd,(struct sockaddr*)&amp;servaddr, socklen) &lt; 0)<br/><br/> &nbsp; &nbsp; &nbsp; {<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;can&#039;t connect to %s!&#92;n&quot;,argv[1]);<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exit(1);<br/><br/> &nbsp; &nbsp; &nbsp; }<br/><br/> &nbsp; &nbsp; &nbsp; <br/><br/> &nbsp; &nbsp; &nbsp; length = recv(clifd,buf,BUFFER_SIZE,0);<br/><br/> &nbsp; &nbsp; &nbsp; if (length &lt; 0)<br/><br/> &nbsp; &nbsp; &nbsp; {<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;error comes when recieve data from server %s!&quot;,argv[1]);<br/><br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;exit(1);<br/><br/> &nbsp; &nbsp; &nbsp; }<br/><br/> &nbsp; &nbsp; &nbsp; printf(&quot;from server %s :&#92;n&#92;t%s &quot;,argv[1],buf);<br/><br/> <br/><br/> &nbsp; &nbsp; &nbsp; close(clifd);<br/><br/> &nbsp; &nbsp; &nbsp; return 0;<br/><br/>}<br/><br/><br/>程序在Fedora core 4下通过编译,有几个warining.但是不影响.<br/>
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] Linux Socket编程实例(一个Hello World程序)  ]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>