华拓科技网
您的当前位置:首页windows下C++网络编程入门

windows下C++网络编程入门

来源:华拓科技网
#include "stdafx.h"
#include "WinSock2.h"
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    WSADATA  wsaData;
    SOCKET ListeningSocket;
    SOCKADDR_IN ServerAddr;
    SOCKET NewConnection;
    SOCKADDR_IN ClientAddr;
    int Port = 5150;

    WSAStartup(MAKEWORD(2, 2), &wsaData);// 初始化Windows Socket 2.2

    ListeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建一个新的Socket来响应 客户端的连接请求;AF_INET字段是表示网络地址的类型,AF_INET表示是internet域中进行通信;SOCK_STREAM表示socket的类型,SOCK_STREAM表示是流套接字IPPROTO_TCP表明协议类型,IPPROTO_TCP或者0表示TCP/IP协议

    ServerAddr.sin_family = AF_INET;                                                         // 填写服务器地址信          
    ServerAddr.sin_port = htons(Port);                                                        // 端口为5150
    ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);//INADDR_ANY表示机器上的所用网络地址 ; 比如你的机器上有两张网卡,那么到达这两张网卡的数据,你的socket都可以得到通知;htonl将IP地址转换为网络格式
    bind(ListeningSocket, (SOCKADDR *)&ServerAddr, sizeof(ServerAddr));        //绑定监听端口;当调用socket函数创建套接字后,该套接字并没有与本机地址和端口等信息相连,bind函数将完成这些工作

    listen(ListeningSocket, 2);                                                                                 // 开始监听,指定最大同时连接数为2

    int len = sizeof(ClientAddr);
    NewConnection = accept(ListeningSocket, (SOCKADDR *)&ClientAddr, &len);// 接受新的连接

    cout << "************************************************" << endl;
    cout << "****new client has been connected******" << endl;
    cout << "*************************************************" << endl;

    /* 当连接建立之后,我们就可以在这里和client进行通信,传输数据了*/

    closesocket(NewConnection);                                                                               //关闭连接
    closesocket(ListeningSocket);                                                                              //并关闭监听Socket

    WSACleanup();                                                                                                     // 释放Windows Socket DLL的相关资源

    return 0;
}

 

Client端代码:

#include "stdafx.h"
#include "WinSock2.h"
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    WSADATA wsaData;
    SOCKET s;
    SOCKADDR_IN ServerAddr;
    int Port = 5150;

    WSAStartup(MAKEWORD(2, 2), &wsaData);                                     //初始化Windows Socket 2.2      
    s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);                           // 创建一个新的Socket来连接服务器  

    ServerAddr.sin_family = AF_INET;
    ServerAddr.sin_port = htons(Port);
    ServerAddr.sin_addr.s_addr = inet_addr("127.0.0.1");                                //在程序中我与本机进行通信
    int result = connect(s, (SOCKADDR *)&ServerAddr, sizeof(ServerAddr));   // 向服务器发出连接请求
    if (result == 0){                                                                                                //result==0表示连接成功
        cout << "Client has connected to server!";
    }

    closesocket(s);
    WSACleanup();

    return 0;
}

 总结:建立网络连接的过程

连接ws2_32.lib 
scoket 建立套接字
bind绑定套接字
listen套接字监听
accept接受连接请求
connect发起连接请求
send发送数据
recv接收数据

转载于:https://www.cnblogs.com/lishuai0214/p/4198457.html

因篇幅问题不能全部显示,请点此查看更多更全内容