WinSock TCP 长连接(while循环)

2021-01-18 16:13

阅读:408

标签:失败   程序   socket   客户   tcp   namespace   cps   缺陷   监听   

前面的程序,不管服务器端还是客户端,都有一个问题,就是处理完一个请求立即退出了,没有太大的实际意义。能不能像Web服务器那样一直接受客户端的请求呢?能,使用 while 循环即可。

这里唯一需要注意的是,每次 客户端 进行连接完之后,都需要进行socketclose()的操作,原因是 服务端 调用 closesocket() 不仅会关闭服务器端的 socket,还会通知客户端连接已断开,所以客户端也需要直接进行socketclose()的操作

服务端的代码:

#include
#include
#pragma comment(lib, "ws2_32.lib") //添加动态链接库

using namespace std;

int main(int argc, char * argv[]) {
    const int   BUFSIZE = 1024;
    SOCKET      ListeningSocket; //定义一个套接字变量
    SOCKET      NewConnection; //客户端的请求生成的新的套接字
    SOCKADDR_IN ClientAddr;
    SOCKADDR_IN ServerAddr;
    char        Message[BUFSIZE];
    int         ClientAddrLen;
    ZeroMemory(Message, BUFSIZE);

    if (argc "  " 

客户端的代码:

#include
#include
#pragma comment(lib, "ws2_32.lib") //添加动态链接库
#pragma warning(disable:4996) //忽略旧函数使用缺陷的警告

using namespace std;

int main(int argc, char * argv[]) {
    const int   BUFSIZE = 1024;
    SOCKET      ClientSocket;
    SOCKADDR_IN ServerAddr;
    char        SendBuf[BUFSIZE];  //发送存储的数据缓冲区
    char        BufRecv[BUFSIZE]; //接收收到的数据缓冲区

    ZeroMemory(SendBuf, BUFSIZE);
    ZeroMemory(BufRecv, BUFSIZE);
    strcpy(SendBuf, "Hello, My Name is Client");

    if (argc  "  ";
        cin >> SendBuf;

        //send发送数据
        if ((ret = send(ClientSocket, SendBuf, strlen(SendBuf), 0)) == SOCKET_ERROR) {
            cout  " 

WinSock TCP 长连接(while循环)

标签:失败   程序   socket   客户   tcp   namespace   cps   缺陷   监听   

原文地址:https://www.cnblogs.com/zpchcbd/p/12173924.html


评论


亲,登录后才可以留言!