TCP socket编程 C/C++实现(windows platform SDK)

转载自:http://www.cnblogs.com/8586/archive/2009/04/14/1435678.html

Server:

#pragma  comment(lib, "ws2_32.lib")  
 
#include 
< Winsock2.h >   
 
#include 
< stdio.h >    
  
  
  
void  main()   
  
{   
  
    
// 版本协商   
  
    WORD wVersionRequested;   
  
    WSADATA wsaData;   
  
    
int  err;   
  
       
  
    wVersionRequested 
=  MAKEWORD( 1 , 1 );  // 0x0101   
  
    err 
=  WSAStartup(wVersionRequested, & wsaData);   
  
    
if (err != 0 )   
  
    {   
  
        
return ;   
  
    }   
  
       
  
    
if (LOBYTE(wsaData.wVersion) != 1   ||  HIBYTE(wsaData.wVersion) != 1 )    
  
        
// wsaData.wVersion!=0x0101   
  
    {   
  
        WSACleanup();   
  
        
return ;   
  
    }   
  
    
// 创建Socket   
  
    SOCKET sockSvr 
=  socket(AF_INET,SOCK_STREAM, 0 );   
  
    
// 创建IP地址和端口   
  
    SOCKADDR_IN addrSvr;   
  
    addrSvr.sin_addr.S_un.S_addr 
=  htonl(INADDR_ANY);   
  
    addrSvr.sin_family 
=  AF_INET;   
  
    addrSvr.sin_port 
=  htons( 6000 );   
  
    
// 绑定端口监听   
  
    bind(sockSvr,(SOCKADDR
* ) & addrSvr, sizeof (SOCKADDR));   
  
    listen(sockSvr,
5 );   
  
       
  
    sockaddr_in addrClient;   
  
    
int  len  =   sizeof (sockaddr);   
  
    
while ( true )   
  
    {   
  
        
// 阻塞方法,获得一个客户Socket连接   
  
        SOCKET sockConn 
=  accept(sockSvr,(sockaddr * ) & addrClient, & len);   
  
        
char  sendbuffer[ 128 ];   
  
        sprintf(sendbuffer,
" Welcom %s! " ,inet_ntoa(addrClient.sin_addr));   
  
        
// 向客户Socket发送数据   
  
        send(sockConn,sendbuffer,strlen(sendbuffer)
+ 1 , 0 );   
  
        
char  recvbuffer[ 128 ];   
  
        
// 从客户Soc接受数据   
  
        recv(sockConn,recvbuffer,
128 , 0 );   
  
        printf(
" %s\n " ,recvbuffer);   
  
        
// 关闭Socket   
  
        closesocket(sockConn);   
  
    }   
  
    closesocket(sockSvr);   
  
    
// 释放Winsock资源   
  
    WSACleanup();   
  
}  

client:

 

#pragma  comment (lib,"ws2_32.lib")  
 
#include 
< Winsock2.h >   
 
#include 
< stdio.h >    
  
  
  
void  main()   
  
{   
  
    
// 版本协商   
  
    WORD wVersionRequested;   
  
    WSADATA wsaData;   
  
    
int  err;   
  
       
  
    wVersionRequested 
=  MAKEWORD( 1 , 1 );  // 0x0101   
  
    err 
=  WSAStartup(wVersionRequested, & wsaData);   
  
    
if (err != 0 )   
  
    {   
  
        
return ;   
  
    }   
  
       
  
    
if (LOBYTE(wsaData.wVersion) != 1   ||  HIBYTE(wsaData.wVersion) != 1 )    
  
        
// wsaData.wVersion!=0x0101   
  
    {   
  
        WSACleanup();   
  
        
return ;   
  
    }   
  
    
// 创建连向服务器的套接字   
  
    SOCKET sock 
=  socket(AF_INET,SOCK_STREAM, 0 );   
  
    
// 创建地址信息   
  
    SOCKADDR_IN hostAddr;   
  
    hostAddr.sin_addr.S_un.S_addr 
=  inet_addr( " 127.0.0.1 " );   
  
    hostAddr.sin_family 
=  AF_INET;   
  
    hostAddr.sin_port 
=  htons( 6000 );   
  
    
// 连接服务器   
  
    connect(sock,(sockaddr
* ) & hostAddr, sizeof (sockaddr));   
  
       
  
    
char  revBuf[ 128 ];   
  
    
// 从服务器获得数据   
  
    recv(sock,revBuf,
128 , 0 );   
  
    printf(
" %s\n " ,revBuf);   
  
    
// 向服务器发送数据   
  
    send(sock,
" Hello Host! " , 12 , 0 );   
  
    closesocket(sock);   
  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值