WinSock TCP 长连接(while循环)
标签:失败 程序 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
评论