一个实现部分功能的控制台聊天程序
对于信息的发送和接收稳定性不能做出保证,在多个客户端同时发送时recv前面的信息会被后面的信息覆盖,send也没有做检测和重发。
服务器端:
#include <stdio.h>
#include <winsock2.h>
#include <iostream>
#include <WS2tcpip.h>
#pragma comment (lib, "ws2_32.lib") //加载 ws2_32.dll
using namespace std;
string user_n[10]; //用户名
string user_m[10]; //密码
int linez[10]; //在线状态
int n_total; // 在线人数
SOCKET BlientSocket[10] ;
void line_set() {
user_n[0] = "a";
user_n[1] = "b";
user_n[2] = "c";
user_n[3] = "d";
user_n[4] = "e";
user_n[5] = "f";
user_n[6] = "g";
user_n[7] = "h";
user_n[8] = "i";
user_n[9] = "j";
user_m[0] = "a1";
user_m[1] = "b1";
user_m[2] = "c1";
user_m[3] = "d1";
user_m[4] = "e1";
user_m[5] = "f1";
user_m[6] = "g1";
user_m[7] = "h1";
user_m[8] = "i1";
user_m[9] = "j1";
for (int i = 0; i < 10; i++) {
linez[i] = 0;
BlientSocket[i] = 0;
}
}
int line_on(string user_n_in,string user_m_in, LPVOID lpParameter){
//返回1用户名或密码不存在,返回0登录成功!并更新在线人数
if (user_n_in=="") {
return 1;
};
for (int i = 0; i < 10;i++) {
if (user_n_in == user_n[i]) {
if (user_m_in==user_m[i]) {
if (linez[i] == 0) {
linez[i] = 1;
n_total++;
BlientSocket[i] = *(SOCKET*)lpParameter;
return 0;
}
};
}
};
return 1;
};
int line_off