上一节我们只是是实现了最简单的C/S模型,也是最为理想的连接方式,但是如果没连接上又该如何呢??
我们需要给他加上一些判断条件,以防止崩溃!!!
修改后如下:
客户端代码
#include <iostream>
#include <winsock2.h>
#pragma comment (lib,"WS2_32.lib")
using namespace std;
int main()
{
//加载套接字库
WSADATA wsadata;
int iRet=WSAStartup(MAKEWORD(2, 2), &wsadata);
if (iRet != 0)
{
cout << "套接字库加载失败" << endl;
return -1;
}
else
{
cout << "套接字库加载成功" << endl;
}
//创建套接字
SOCKET clientsocket;
clientsocket = socket(AF_INET, SOCK_STREAM, 0);
if (clientsocket == INVALID_SOCKET)
{
cout << "套接字创建失败" << endl;
return -1;
}
else
{
cout << "套接字创建成功" << endl;
}
//初始化客户端地址族变量
SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET;
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_port = htons(8000);
//连接
iRet=connect(clientsocket, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
if (iRet == SOCKET_ERROR)
{
cout << "连接失败" << endl;
return -1;
}
else
{
cout << "连接成功" << endl;
}
//发送数据
while (true)
{
char sendBuff[255];
cin >> sendBuff;
send(clientsocket, sendBuff, 255, 0);
}
}
服务器代码:
#include <iostream>
#include <winsock2.h>
#pragma comment (lib,"WS2_32.lib")
using namespace std;
int main()
{
//加载套接字库
WSADATA wsadata;
int iRet=WSAStartup(MAKEWORD(2, 2), &wsadata);
if (iRet != 0)
{
cout << "套接字库加载失败" << endl;
return -1;
}
//创建套接字
SOCKET serversocket;
serversocket = socket(AF_INET, SOCK_STREAM, 0);
if (serversocket == INVALID_SOCKET)
{
cout << "套接字创建失败" << endl;
return -1;
}
else
{
cout << "套接字创建成功" << endl;
}
//初始化服务器地址族变量
SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET;
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_port = htons(8000);
//绑定
iRet = bind(serversocket, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
if (iRet == SOCKET_ERROR)
{
cout << "绑定失败" << endl;
return -1;
}
else
{
cout << "绑定成功" << endl;
}
//监听
iRet = listen(serversocket, 10);
if (iRet == SOCKET_ERROR)
{
cout << "开启监听失败" << endl;
return -1;
}
else
{
cout << "开启监听成功" << endl;
}
//接收连接
SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
SOCKET connectSocket=accept(serversocket, (SOCKADDR*)&addrClient, &len);
if (INVALID_SOCKET == connectSocket)
{
cout << "接受连接失败" << endl;
return -1;
}
else
{
cout << "接受连接成功" << endl;
}
//接收数据
while (true)
{
char recvBuff[255];
int iRet = recv(connectSocket, recvBuff, 255, 0);
if (iRet <= 0)
{
cout << "客户端关闭连接" << endl;
return -1;
}
cout << recvBuff << endl;
}
}
思考:如何实现客户端和服务器相互收发数据呢?