最新学习了下win32平台以及linux平台的socket程序编写,发现2者的差别不是很大,就是传输数据的时候调用的函数不同 基本流程都是大同小异,下面贴下自己写的一个比较简单的socket程序,
 
服务器端:
InBlock.gif#include <stdio.h>
InBlock.gif#include <WINSOCK2.H>
InBlock.gif
InBlock.gif
InBlock.gif int main()
InBlock.gif{
InBlock.gif  WORD wVersionRequested;
InBlock.gif  WSADATA wsaData;
InBlock.gif   int err;
InBlock.gif    
InBlock.gif  wVersionRequested = MAKEWORD( 1, 1 );
InBlock.gif    
InBlock.gif  err = WSAStartup( wVersionRequested, &wsaData );
InBlock.gif   if ( err != 0 ) {
InBlock.gif     return 1;
InBlock.gif  }
InBlock.gif    
InBlock.gif   if ( LOBYTE( wsaData.wVersion ) != 1 ||
InBlock.gif                HIBYTE( wsaData.wVersion ) != 1 )    
InBlock.gif  {                                                                
InBlock.gif    WSACleanup( );
InBlock.gif     return 1;    
InBlock.gif  }
InBlock.gif        
InBlock.gif        SOCKET socket_srv = socket(AF_INET,SOCK_STREAM,0);
InBlock.gif   struct sockaddr_in        soc_addrs,soc_addrc ;
InBlock.gif   int    soc_lens = sizeof(sockaddr);
InBlock.gif   int    soc_lenc = sizeof(sockaddr);
InBlock.gif   char buffer[100];
InBlock.gif        soc_addrs.sin_addr.S_un.S_addr = inet_addr( "127.0.0.1");
InBlock.gif  soc_addrs.sin_family = AF_INET;
InBlock.gif  soc_addrs.sin_port = htons(6000);
InBlock.gif  bind(socket_srv,(SOCKADDR *) &soc_addrs,soc_lenc);
InBlock.gif  listen(socket_srv,10);
InBlock.gif   while ( 1 )
InBlock.gif  {
InBlock.gif    SOCKET socket_client = accept(socket_srv,(SOCKADDR*)&soc_addrc,&soc_lenc);
InBlock.gif    recv(socket_client,buffer,100,0);
InBlock.gif    printf( "%s\n",buffer);
InBlock.gif                closesocket( socket_client);
InBlock.gif  }
InBlock.gif
InBlock.gif  WSACleanup();
InBlock.gif     return 0;
InBlock.gif}
 
 
客户端:
InBlock.gif#include <stdio.h>
InBlock.gif#include <WINSOCK2.H>
InBlock.gif
InBlock.gif
InBlock.gif int main()
InBlock.gif{
InBlock.gif  WORD wVersionRequested;
InBlock.gif  WSADATA wsaData;
InBlock.gif   int err;
InBlock.gif    
InBlock.gif  wVersionRequested = MAKEWORD( 1, 1 );
InBlock.gif    
InBlock.gif  err = WSAStartup( wVersionRequested, &wsaData );
InBlock.gif   if ( err != 0 ) {
InBlock.gif     return 1;
InBlock.gif  }
InBlock.gif    
InBlock.gif   if ( LOBYTE( wsaData.wVersion ) != 1 ||
InBlock.gif                HIBYTE( wsaData.wVersion ) != 1 )    
InBlock.gif  {                                                                
InBlock.gif    WSACleanup( );
InBlock.gif     return 1;    
InBlock.gif  }
InBlock.gif        
InBlock.gif   struct sockaddr_in    sco_addr;
InBlock.gif   int len = sizeof(SOCKADDR);
InBlock.gif   char buffer[100] = { "welcome to http://wiliiwin.blog.51cto.com/"};
InBlock.gif  sco_addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
InBlock.gif  sco_addr.sin_family = AF_INET;
InBlock.gif  sco_addr.sin_port = htons(6000);
InBlock.gif        SOCKET scoke_client = socket(AF_INET,SOCK_STREAM,0);
InBlock.gif  while (1)
InBlock.gif  {
InBlock.gif    connect(scoke_client,(SOCKADDR*)&sco_addr,len);
InBlock.gif            send(scoke_client,buffer,100,0);
InBlock.gif    closesocket(scoke_client);
InBlock.gif  }
InBlock.gif  WSACleanup();
InBlock.gif  return 0;
InBlock.gif}
 
此程序就是客户端向服务器端发送一个字符串,服务端会接收到这个字符串,服务端要是现实出接受的字符串,就说明程序已经实现了网络通信.