一个基本的TCP/IP编程实例

//TCP1C.cpp CopyRight 小扣 XPsp3 VS2008    //  
//创建一个基本的阻塞模式TCP连接的客户端,        //  
//与服务器建立连接后便开始发送并显示发送量,      //  
//当收到“exit"命令时发送该命令同时程序退出。     //   

*************TCP1C.h*********************************

view plaincopy to clipboardprint?
#ifndef TCP1C_H
#define TCP1C_H

#include <iostream>
#include <WINSOCK2.H>
#pragma comment (lib,"ws2_32.lib")

#endif
#ifndef TCP1C_H
#define TCP1C_H

#include <iostream>
#include <WINSOCK2.H>
#pragma comment (lib,"ws2_32.lib")

#endif

//============================================  
#include "TCP1C.h"  

int main(){  
    WSADATA wsaData;               //用于填充套接字库版本的有关信息  
    SOCKET ServerSocket = NULL;   //服务器套接字(用于同服务器IPv4地址绑定)  
    SOCKADDR_IN ServerSocketAddr; //服务器的IPv4地址  
    int     port = 9999;           //要连接服务器的9999端口  
    char    buf[1024];             //存储消息用  
    int     MessageLen = 0;        //返回的消息长度  

    //加载Winsock 2.2版本  
    if(WSAStartup(MAKEWORD(2,2),&wsaData) !=0)  
    {  
        std::cout<<"WSAStartup failed"<<std::endl;  
        return 1;  
    }  

    //创建套接字  
    if((ServerSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == INVALID_SOCKET)  
        std::cout<<"Create ServerSocket failed with error"<<" "<<WSAGetLastError()<<std::endl;  

    //填写服务器IPv4信息  
    ServerSocketAddr.sin_family = AF_INET;  
    ServerSocketAddr.sin_port   = htons(port);  
    ServerSocketAddr.sin_addr.s_addr   = inet_addr("127.0.0.1");  

    //连接服务器  
    if(connect(ServerSocket,(SOCKADDR*)&ServerSocketAddr,sizeof(ServerSocketAddr)) ==SOCKET_ERROR)  
        std::cout<<"Connecting failed with error"<<" "<<WSAGetLastError()<<std::endl;  
    else   
        std::cout<<"Connect successing!"<<std::endl;  

    //发送数据,直到数据内容为"exit"则退出程序  
    while(strcmp(buf,"exit") != 0)  
    {  
        std::cout<<"Please input:"<<std::endl;  
        std::cin>>buf;  
        if((MessageLen = send(ServerSocket,buf,strlen(buf),0)) == INVALID_SOCKET)  
            std::cout<<"Send data failed with error"<<" "<<WSAGetLastError()<<std::endl;  
        else
            std::cout<<"Send"<<" "<<MessageLen<<" "<<"byte"<<"datas"<<std::endl;;  
    }  

    closesocket(ServerSocket);  
    WSACleanup();  
    return 0;  
}

 

***************TCP1S.h*******************************

view plaincopy to clipboardprint?
#ifndef BASICS_H
#define BASICS_H

#include <WINSOCK2.H>
#include <iostream>

#pragma comment (lib,"WS2_32.LIB")

#endif
*************TCP1S.cpp*******************************

view plaincopy to clipboardprint?
//TCP1S.cpp CopyRight 小扣 XPsp3 VS2008    //  
//创建一个基本的阻塞模式TCP连接的服务端,         //  
//与客户端建立连接后便开始接收数据并显示,        //  
//当收到“exit"消息时程序退出。                   //  
//============================================

#include "TCP1S.h"  

int main(){  

    WSADATA wsaData;               //在加载Winsock DLL版本时被用来填充该库版本的有关信息  
    SOCKET ListeningSocket;       //用于监听的套接字  
    SOCKET NewConnection = NULL; //accept函数反回的套接字,用于同connect方(客户端)连系。  
    SOCKADDR_IN ServerAddr;        //本地(服务器)IPv4地址  
    SOCKADDR_IN ClientAddr;        //connect方IPv4地址  
    int     port = 9999;           //本地打要打开的端口  
    int     ClientAddrLen = sizeof(ClientAddr); //connect方IPv4地址的长度  
    int     BufLen = 0;            //接收到的信息的长度  
    char    buf[50];               //用于存储信息  

    /*加载2.2版本的Winsock*/
    if(WSAStartup(MAKEWORD(2,2),&wsaData))  
    {  
        std::cout<<"WSAStartup failed"<<std::endl;  
        return 1;  
    }  
    std::cout<<"WSAStartup successing!"<<std::endl;  

    /*创建套接字*/
    if((ListeningSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == INVALID_SOCKET)    
    {  
        std::cout<<"Create ListenSocket failed with error"<<" "<<WSAGetLastError()<<std::endl;  
        return 1;  
    }  
    std::cout<<"Create ListenSocket successing!"<<std::endl;  

    /*设置服务器IPv4地址*/
    ServerAddr.sin_family = AF_INET;    
    ServerAddr.sin_port   = htons(port);  
    ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);  

    /*绑定套接字与地址信息*/
    if(bind(ListeningSocket,(SOCKADDR*)&ServerAddr,sizeof(ServerAddr)) == SOCKET_ERROR)   
    {  
        std::cout<<"Bind failed with error"<<" "<<WSAGetLastError()<<std::endl;  
        return 1;  
    }  
    std::cout<<"Bind successing!"<<std::endl;  

    /*开始监听*/
    if(listen(ListeningSocket,3) == SOCKET_ERROR)  
    {  
        std::cout<<"Listen failed with error"<<" "<<WSAGetLastError()<<std::endl;  
        return 1;  
    }  
    else
    std::cout<<"Listening..."<<std::endl;  


    /*接受连接*/
    if((NewConnection = accept(ListeningSocket,(SOCKADDR*)&ClientAddr,&ClientAddrLen)) == INVALID_SOCKET)    
            std::cout<<"Accept failed with error"<<" "<<WSAGetLastError()<<std::endl;  
    else
        std::cout<<"Accept successing!"<<std::endl;  

    /*接收并显示数据*/
    while(strcmp(buf,"exit"))    
    {  
        BufLen = recv(NewConnection,buf,sizeof(buf),0);  
        buf[BufLen] = '/0';  
        std::cout<<buf<<std::endl;  
    }  

    /*关闭套接字*/
    closesocket(ListeningSocket);  
    closesocket(NewConnection);  
    WSACleanup();  
          
    return 0;  
}

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dclchj/archive/2009/05/25/4213318.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值