可用的客户端程序(暂存)

#include <Winsock2.h>
#include <iostream>
#include <string>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
void main()
{
    //加载套接字库
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;

    wVersionRequested = MAKEWORD( 1, 1 );
    err = WSAStartup( wVersionRequested, &wsaData );//该函数的功能是加载一个Winsocket库版本
    if ( err != 0 ) {
        return;
    }
    if ( LOBYTE( wsaData.wVersion ) != 1 ||
        HIBYTE( wsaData.wVersion ) != 1 ) {
            WSACleanup( );
            return; 
    }

    //创建套接字
    SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr.S_un.S_addr = inet_addr("192.168.1.14");
    addrSrv.sin_family = AF_INET;
    addrSrv.sin_port = htons(8080);

    //将套接字绑定到端口上
    bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

    //将套接字设置为监听模式
    listen(sockSrv,5);

    //等待客户请求来到,当请求来到时候,接受请求,接受连接请求,返回一个新的对应于此连接套接字
    SOCKADDR_IN addrClient;
    int len = sizeof(SOCKADDR);
    //开始监听
    cout<<"等待用户连接"<<endl;
    SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);//sockConn用于建立连接的套接字
    cout<<"用户连接到来"<<endl;

    //和客户通信
    //接收数据
    char recvBuffer[300];//接收字符数据
    memset((void*)recvBuffer,'\0',300);
    cout<<"等待对方发送数据... "<<endl;
    recv(sockConn,recvBuffer,100,0);
    cout<<"对方的地址为: "<<inet_ntoa(addrClient.sin_addr)<<endl;
    cout<<"接收的内容为: "<<recvBuffer<<endl;

    //发送数据
    string sendBuffer = "this is server";
    cout<<"向客户端方发送数据: "<<sendBuffer.c_str()<<endl;    
    send(sockConn,sendBuffer.c_str(),sendBuffer.size(),0);

    //关闭本次连接的通道
    closesocket(sockConn);


    closesocket(sockSrv);//关闭服务器套接字
    WSACleanup();//结束套接字库的调用
    system("pause");

}


服务端:

#include <Winsock2.h>
#include <iostream>
#include <string>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
void main()
{
    //加载套接字库
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;

    wVersionRequested = MAKEWORD( 1, 1 );
    err = WSAStartup( wVersionRequested, &wsaData );//该函数的功能是加载一个Winsocket库版本
    if ( err != 0 ) {
        return;
    }
    if ( LOBYTE( wsaData.wVersion ) != 1 ||
        HIBYTE( wsaData.wVersion ) != 1 ) {
            WSACleanup( );
            return; 
    }

    //创建套接字
    SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr.S_un.S_addr = inet_addr("192.168.1.14");
    addrSrv.sin_family = AF_INET;
    addrSrv.sin_port = htons(8080);

    //将套接字绑定到端口上
    bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

    //将套接字设置为监听模式
    listen(sockSrv,5);

    //等待客户请求来到,当请求来到时候,接受请求,接受连接请求,返回一个新的对应于此连接套接字
    SOCKADDR_IN addrClient;
    int len = sizeof(SOCKADDR);
    //开始监听
    cout<<"等待用户连接"<<endl;
    SOCKET sersock = accept(sockSrv,(SOCKADDR*)&addrClient,&len);//sockConn用于建立连接的套接字
    cout<<"用户连接到来"<<endl;
/////////////////////////////////////////////////////////////////////////////////////////////////////////
    //和客户通信
    //接收数据
	
    int choice=0;
    int i=0;
    char temp_L=0;
    char temp_H=0;
    char CIN_Data;
    int CIN_Data_len;
    int CIN_Data_index=0;
	char msg[10000];
	memset(msg,0,sizeof(msg));
    cout<<"请输入功能 1 发送 2 接受 0 退出 "<<endl;
    while (cin>>choice&&choice!=0)
    {
        CIN_Data_index=0;
        memset(msg,0,sizeof(msg));
        if (choice==1)
        {
            cout<<"选择的是发送功能:"<<endl;
            cout<<"   请输入数据长度: ";
            cin>>CIN_Data_len;
            cout<<"请输入"<<CIN_Data_len<<"个十六进制数据";
            while (CIN_Data_len>CIN_Data_index)
            {
                scanf("%x",&CIN_Data);
                msg[CIN_Data_index]=CIN_Data;
                CIN_Data_index++;
            }
            send(sersock,msg,strlen(msg),0 ); //发出输入信息
            cout<<"请输入功能 1 发送 2 接受 0 退出 "<<endl;
        }
        if (choice==2)
        {
            cout<<"等待数据..."<<endl;
            len = recv ( sersock,msg,200,0 ); //接收用户信息
            printf("\n收到信息:%s",msg);
            for ( i=0;i<len;i++)
            {
                cout<<"msg[]"<<i<<endl;
                temp_L=msg[i]&0x0f;
                temp_H=msg[i]>>4;
                temp_H=temp_H&0x0f;
                cout<<"temp_L & temp_H :"<<(int)temp_H<<"  "<<(int)temp_L<<endl;
            }
            cout<<"请输入功能 1 发送 2 接受 0 退出 "<<endl;;

        }

    }
















/*



    char recvBuffer[300];//接收字符数据
    memset((void*)recvBuffer,'\0',300);
    cout<<"等待对方发送数据... "<<endl;
    recv(sockConn,recvBuffer,100,0);
    cout<<"对方的地址为: "<<inet_ntoa(addrClient.sin_addr)<<endl;
    cout<<"接收的内容为: "<<recvBuffer<<endl;

    //发送数据
    string sendBuffer = "this is server";
    cout<<"向客户端方发送数据: "<<sendBuffer.c_str()<<endl;    
    send(sockConn,sendBuffer.c_str(),sendBuffer.size(),0);



*/



//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //关闭本次连接的通道
    closesocket(sersock);


    closesocket(sockSrv);//关闭服务器套接字
    WSACleanup();//结束套接字库的调用
    system("pause");

}

客户端:

#include <cstdlib>
#include <iostream>

#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <winsock2.h> //Windows Sockets函数定义
#include <stdlib.h>
using namespace std;
bool InitSocket(); //初始化Windows Sockets动态连接库
#pragma comment(lib, "Ws2_32.lib")


int main(int argc, char *argv[])
{
    int type;
    SOCKET sock; //套接字
    struct sockaddr addr; //地址

    int len,portno;
    int err;
    char msg[255];
    bool over;
    int i;
    char temp_H=0;
    char temp_L=0;


    if ( !InitSocket() ) return 0; //初始化Window Sockets DLL
    type = SOCK_STREAM; //面向连接的流式Socket类型
    sock = socket( AF_INET,type,0 ); //创建支持Internet协议的流式Socket
    if ( sock==INVALID_SOCKET ) //不能创建,返回
    {
        printf("不能创建Socket!");
        getch();
        WSACleanup( ); //卸载Window Sockets DLL
        return 0;
    }

    //客户端地址设定
    ((sockaddr_in*)&addr)->sin_family = AF_INET; //AF_INET:使用Internet 协议
    ((sockaddr_in*)&addr)->sin_port = 0; //客户端端口号:0--系统分配
    ((sockaddr_in*)&addr)->sin_addr.s_addr = 0; //主机地址:0--本机
    bind(sock,&addr,sizeof(addr)); //把地址与Socket绑定

    //输入服务器地址
    ((sockaddr_in*)&addr)->sin_family = AF_INET; //AF_INET:使用Internet 协议
    printf("输入服务器地址(0.0.0.0):");
    gets(msg);
    if (msg[0]=='\0')
        sprintf(msg,"0.0.0.0"); //如果直接回车,就采用默认设置(0.0.0.0):本机
    ((sockaddr_in*)&addr)->sin_addr.s_addr = inet_addr(msg); //服务器地址
    printf("输入服务器端口号(3000):");
    gets(msg);
    if (msg[0]=='\0') portno=3000; //如果直接回车,就采用默认端口号3000
    else portno=atoi(msg);
    ((sockaddr_in*)&addr)->sin_port = htons( portno ); //服务器端口号;
    //htons():把主机表示的短整数转化成网络字节顺序
    len = sizeof(addr);
    printf("与服务器连接...!");
    err = connect( sock,(sockaddr*)&addr,len );
    //在使用面向连接协议时(TCP),必须与服务器连接成功后,才可通信
    //在无连接协议(UDP)中,可以直接向对方发数据,而无需连接
    if ( err==SOCKET_ERROR )
    {
        printf("连接失败!");
        getch();
        WSACleanup( ); //卸载Window Sockets DLL
        return 0;
    }
    printf("成功连接到服务器!");
    cout<<endl;
    int choice=0;
    char CIN_Data;
    int CIN_Data_len;
    int CIN_Data_index=0;
    cout<<"请输入功能 1 发送 2 接受 0 退出 "<<endl;
    while (cin>>choice&&choice!=0)
    {
        CIN_Data_index=0;
        memset(msg,0,sizeof(msg));

        if (choice==1)
        {
            cout<<"选择的是发送功能:"<<endl;
            cout<<"   请输入数据长度: ";
            cin>>CIN_Data_len;
            cout<<"请输入"<<CIN_Data_len<<"个十六进制数据";
            while (CIN_Data_len>CIN_Data_index)
            {
                scanf("%x",&CIN_Data);
                msg[CIN_Data_index]=CIN_Data;
                CIN_Data_index++;
            }
            send( sock,msg,strlen(msg),0 ); //发送输入信息
            cout<<"请输入功能 1 发送 2 接受 0 退出 "<<endl;
        }
        if (choice==2)
        {
            cout<<"等待数据..."<<endl;
            len = recv ( sock,msg,200,0 );
            printf("\n收到信息:");
            printf(msg); //显示接受信息

            cout<<endl;

            for ( i=0;i<len;i++)
            {
                cout<<"msg[]"<<i<<endl;
                temp_L=msg[i]&0x0f;
                temp_H=msg[i]>>4;
                temp_H=temp_H&0x0f;
                cout<<"temp_L & temp_H :"<<(int)temp_H<<"  "<<(int)temp_L<<endl;
            }
            cout<<"请输入功能 1 发送 2 接受 0 退出 "<<endl;

        }
    }

    closesocket(sock);
    WSACleanup( ); //卸载Window Sockets DLL
    return 0;
}

bool InitSocket()
{
    WORD wVersionRequested;
    WSADATA wsaData;
    int err;

    wVersionRequested = MAKEWORD( 2, 0 ); //Winsock2.0
    //初始化Windows Sockets DLL,
    err = WSAStartup( wVersionRequested, &wsaData ); //加载Winsock DLL到内存
    if ( err != 0 )
    {
        printf("没有Windows Socket动态库!\n");
        getch();
        return false;
    }

    if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 0 )
    {
        printf("需要Windows Socket 2!\n");
        getch();
        WSACleanup( ); //非Winsock2.0时,卸载Window Sockets DLL
        return false;
    }
    return true;
}



你可能感兴趣的:(可用的客户端程序(暂存))