|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
×
刚学习socket编程,仿照教学视频,分别编写了windows下的服务端和客户端程序。设定连接数为2,
但是实际运行时,当连接数超过2时,还是正常运行。从网上找些程序对比,也没找出来错在哪里,
现把服务端程序发布如下,请大神们帮忙看下什么毛病?
;server.cpp
#include <iostream>
#include<WinSock2.h>
#include <WS2tcpip.h> // 添加这个头文件
#pragma comment(lib,"WS2_32")
using namespace std;
#include <stdio.h>
int main()
{
cout << "this is Server windows" << endl;
////初始化网络库
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
cout << "Failed to initialize Windsock" << endl;
return 1;
}
//创建监听套接字
SOCKET listenSocket = socket(AF_INET, SOCK_STREAM, 0);
if (listenSocket == INVALID_SOCKET)
{
cout << "Failed to create socket" << endl;
WSACleanup();
return 1;
}
//设置服务器地址和端口
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = INADDR_ANY;
serverAddr.sin_port = htons(6000);
//绑定监听端口
if (bind(listenSocket, (sockaddr*)&serverAddr, sizeof(serverAddr)) < 0)
{
cout << "Failed to bind socket." << endl;
closesocket(listenSocket);
WSACleanup();
return 1;
}
//建立监听状态
if (listen(listenSocket, 2) < 0)
{
cout << "Failed to listen onf socket." << endl;
closesocket(listenSocket);
WSACleanup();
return 1;
}
//接收客户端连接,并新建和客户端通信的套接字clientSocket
//循环监听,并处理信息
int len = sizeof(sockaddr);
while (true)
{
SOCKET clientSocket = accept(listenSocket, (sockaddr*)&serverAddr, &len);
if (clientSocket == INVALID_SOCKET)
{
cout << "Failed to accept client connection" << endl;
continue;
}
char revBuffer[1024] = "";
if (recv(clientSocket, revBuffer, sizeof(revBuffer), 0) == SOCKET_ERROR)
{
cout << "Failed to receive data" << endl;
closesocket(clientSocket);
continue;
}
cout << "recive client:" << revBuffer << endl;
string message = "server:hello client";
if (send(clientSocket, message.c_str(), message.size(), 0) == SOCKET_ERROR)
{
cout << "Failed to send data" << endl;
}
closesocket(clientSocket);
}
closesocket(listenSocket);
WSACleanup();
return 0;
} |
|