VC中的socket通讯例程(TCP协议)

来源:互联网 发布:宁夏干部培训网络学习 编辑:程序博客网 时间:2024/05/01 13:29
//TCP的服务器端:(TcpSrv.cpp)

#include 
"Winsock2.h"

#include 
"stdio.h"

 

void main()

{

         
//初始化socket编程环境

         WORD wVersionRequested;

         WSADATA wsaData;

         
int err;

         wVersionRequested 
= MAKEWORD( 11 );

         err 
= WSAStartup( wVersionRequested, &wsaData );

         
if ( err != 0 )

         
{

                   
return;

         }


         
if ( LOBYTE( wsaData.wVersion ) != 1 ||

        HIBYTE( wsaData.wVersion ) 
!= 1 )

         
{

                  WSACleanup( );

                   
return;

         }


         

         
//创建Tcp服务器socket

         SOCKET sockSrv 
= socket( AF_INET , SOCK_STREAM , 0 );

         

         
//服务器地址

         SOCKADDR_IN addrSrv ;

         addrSrv.sin_addr.S_un.S_addr 
= htonl(INADDR_ANY) ;

         addrSrv.sin_family 
= AF_INET ;

         addrSrv.sin_port 
= htons(4000) ;

         

         
//将socket与地址绑定在一起

         bind( sockSrv ,(SOCKADDR
*)&addrSrv , sizeof(SOCKADDR) ) ;

         

         
//开始监听客户端请求,最大连接数为5

         listen( sockSrv , 
5 ) ;

         

         
//用于存放客户端地址

         SOCKADDR_IN addrClient ;

         
int len = sizeof( SOCKADDR_IN ) ;

         

         
//不断接收客户端发送的请求

         
while ( 1 )

         
{

                   
//接收到的客户端请求socket

                  SOCKET sockConn 
= accept( sockSrv , (SOCKADDR *)&addrClient , &len ) ;

                   

                   
//发送数据

                   
char sendBuf[100] ;

                  sprintf( sendBuf , 
"Weclome %s to here:" , inet_ntoa(addrClient.sin_addr) ) ;

                  send( sockConn , sendBuf , strlen(sendBuf)
+1 , 0 ) ;

                   

                   
//接收数据

                   
char recvBuf[100] ;

                  recv( sockConn , recvBuf , 
100 , 0 ) ;

                  printf(
"%s " , recvBuf ) ;

                   

                   
//关闭socket

                  closesocket( sockConn ) ;

         }


         
//清理socket编程环境

         WSACleanup() ;

}


 

//TCP的客户端:(TcpClient.cpp)

 

# include 
"Winsock2.h"

# include 
"stdio.h"

 

void main()

{

         
//初始化socket编程环境

         WORD wVersionRequested;

         WSADATA wsaData;

         
int err;

         wVersionRequested 
= MAKEWORD( 11 );

         err 
= WSAStartup( wVersionRequested, &wsaData );

         
if ( err != 0 )

         
{

                   
return;

         }


         
if ( LOBYTE( wsaData.wVersion ) != 1 ||

        HIBYTE( wsaData.wVersion ) 
!= 1 )

         
{

                  WSACleanup( );

                   
return;

         }


         

         
//建立客户端socket

         SOCKET sockClient 
= socket( AF_INET ,SOCK_STREAM , 0 ) ;

         

         
//服务器地址

         SOCKADDR_IN addrSrv ;

         addrSrv.sin_addr.S_un.S_addr 
= inet_addr("127.0.0.1") ;

         addrSrv.sin_family 
= AF_INET ;

         addrSrv.sin_port 
= htons( 4000 ) ;

         

         
//连接服务器

         connect( sockClient , (SOCKADDR
*)&addrSrv , sizeof(SOCKADDR)) ;

         

         
//等待接收服务器的响应

         
char recvBuf[100];

         recv( sockClient , recvBuf , 
100 , 0 ) ;

         printf( 
"%s " , recvBuf ) ;

         

         
char sendBuf[100] ;

         sprintf( sendBuf , 
"%s" , "this is zhang san" ) ;

         send( sockClient , sendBuf , strlen(sendBuf)
+1 , 0 ) ;

         

         closesocket( sockClient ) ;

         WSACleanup() ;

}