c++控制台阻塞+多线程聊天室
来源:互联网 发布:java大牛简历 编辑:程序博客网 时间:2024/06/11 21:36
服务端:
#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib")
#include <iostream>
#include <thread>
using namespace std;
class server
{
public:
WSADATA wsaData;
SOCKET sockServer;
SOCKADDR_IN addrServer;
SOCKET sockClient;
SOCKADDR_IN addrClient;
server();
void send();
void recv();
};
server::server()
{
if (WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
{
cout << "WSAStartup failed!" << endl;
return;
}
//创建套接字
sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(INVALID_SOCKET == sockServer)
{
cout << "socket failed!" << endl;
WSACleanup();//释放套接字资源;
return;
}
//服务器套接字地址
addrServer.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//INADDR_ANY表示任何IP
addrServer.sin_family=AF_INET;
addrServer.sin_port=htons(5999);//绑定端口6000
::bind(sockServer,(SOCKADDR*)&addrServer,sizeof(SOCKADDR));
//Listen监听端
listen(sockServer,5);//5为等待连接数目
int len=sizeof(SOCKADDR);
cout<<"监听中..."<<endl;
sockClient=accept(sockServer,(SOCKADDR*)&addrClient,&len);
cout<<"已监听到"<<endl;
}
void server::send()
{
char sendBuf[100];
for (;;)
{
sendBuf[0]='\0';
cin>>sendBuf;
if (sendBuf[0]!='\0')
{
::send(sockClient,sendBuf,100,0);
}
}
}
void server::recv()
{
char recvBuf[100];
for (;;)
{
recvBuf[0]='\0';
::recv(sockClient,recvBuf,100,0);
if (recvBuf[0]!='\0')
{
cout<<"客户端:"<<recvBuf<<endl;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
server sock;
thread tsend(&server::send,sock);
thread trecv(&server::recv,sock);
tsend.join();
trecv.join();
system("pause");
return 0;
}
客户端:
#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib")
#include <iostream>
#include <thread>
#include <string>
using namespace std;
class client
{
public:
WSADATA wsaData;
SOCKET sockClient;//客户端Socket
SOCKADDR_IN addrServer;//服务端地址
client(const string &ip);
void send();
void recv();
};
client::client(const string &ip)
{
WSAStartup(MAKEWORD(2,2),&wsaData);
//新建客户端socket
sockClient=socket(AF_INET,SOCK_STREAM,0);
//定义要连接的服务端地址
addrServer.sin_addr.S_un.S_addr=inet_addr(ip.c_str());//目标IP(127.0.0.1是回送地址)
addrServer.sin_family=AF_INET;
addrServer.sin_port=htons(5999);//连接端口6000
//连接到服务端
connect(sockClient,(SOCKADDR*)&addrServer,sizeof(SOCKADDR));
}
void client::send()
{
char sendBuf[100];
for (;;)
{
sendBuf[0]='\0';
cin>>sendBuf;
if (sendBuf[0]!='\0')
{
::send(sockClient,sendBuf,100,0);
}
}
}
void client::recv()
{
char recvBuf[100];
for (;;)
{
recvBuf[0]='\0';
::recv(sockClient,recvBuf,100,0);
if (recvBuf[0]!='\0')
{
cout<<"服务端:"<<recvBuf<<endl;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
string ip;
cout<<"请输入服务端ip:";
cin>>ip;
client c(ip);
thread tsend(&client::send,c);
thread trecv(&client::recv,c);
tsend.join();
trecv.join();
system("pause");
return 0;
}
- c++控制台阻塞+多线程聊天室
- Java 简易C/S结构多线程聊天室 (阻塞式)
- 控制台聊天室(Socket+多线程)
- 用java多线程实现一个控制台聊天室
- 用java多线程实现一个控制台聊天室
- 用java多线程实现一个控制台聊天室
- 基于socket的多线程(阻塞模式)聊天室
- C#Socket多线程通信(聊天室)
- 多线程异步非阻塞C语言爬虫
- Python编写基于socket的非阻塞多人聊天室程序(单线程&多线程)
- 【Java】基于TCP协议多线程服务器-客户端交互控制台聊天室简例
- 【C语言】linux下简单的聊天室程序(TCP+多线程)
- 基于Linux C的聊天室客户端(三)多线程
- 命令行界面的C/S聊天室应用 (Socket多线程实现)
- 利用多线程实现linux下C语言的聊天室程序:
- java简单的控制台聊天室
- Java NIO 非阻塞式 C/S结构简易 多人聊天室
- 多线程示例--聊天室
- 页面管理
- “猿”?“媛”?
- http://blog.csdn.net/wuruixn/article/details/8536785
- Random类
- AJAX小案例:动态搜索提示(仿百度)
- c++控制台阻塞+多线程聊天室
- 如何用Python进行大数据挖掘和分析
- Codeforces 280 C. Game on Tree (概率与期望)
- 简单易用的MongoDB
- 从零开始写OJ---Special Judge
- 利用指针修改值
- 测试方向随笔
- mamp pro 4.1破解版
- 替代恐慌你有吗?程序员会被深度学习技术淘汰吗?