广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++基于socket编程实现聊天室功能
  • 405
分享到

C++基于socket编程实现聊天室功能

2024-04-02 19:04:59 405人浏览 薄情痞子
摘要

本文实例为大家分享了c++基于Socket编程实现聊天室的具体代码,供大家参考,具体内容如下 服务端 // server.cpp : 此文件包含 "main" 函数。程序执行将在

本文实例为大家分享了c++基于Socket编程实现聊天室的具体代码,供大家参考,具体内容如下

服务端


// server.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
 
#include "pch.h"
#include <iOStream>
#include "winsock2.h"
#include "stdlib.h"
#include "stdio.h"
#include "string"
#pragma comment (lib, "ws2_32.lib")
 
using namespace std;
 
 
SOCKET clientSocket[1024];
int k = 0;
 
void communication(LPVOID n)
{
 char buff[256];
 int r;
 int i = (int)n;
 //cout << i << ":" << endl;
 while (1)
 {
 
  memset(buff, 0, 256);
  r = recv(clientSocket[i - 1], buff, 255, NULL);
  if (r > 0)
  {
   cout << i << ":" << buff << endl;
   for (int j = 0; j < k; j++)
   {
    send(clientSocket[j], buff, strlen(buff), NULL);
   }
  }
 
 }
}
 
 
int main()
{
 
 //加载socket库 版本号
 WSADATA wsaData;
 WSAStartup(MAKEWORD(2, 2), &wsaData) != 0;//成功==0
 if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
 {
  cout << "请求版本失败!\n" << endl;
  return -1;
 }
 cout << "请求版本成功!\n" << endl;
 //创建socket
 //sockSer = socket(AF_INET, SOCK_STREAM,IPPROTO_tcp);//AF=Address family ,ipv4,TCP,0
 SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 if (serverSocket == INVALID_SOCKET)
 {
  cout << "创建socket失败!\n" << endl;
  return -1;
 }
 cout << "创建socket成功!\n" << endl;
 //addrSer.sin_addr.S_un.S_addr
 SOCKADDR_IN addr = { 0 };
 
 //初始化地址
 addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");// htonl(INADDR_ANY);//inet_addr("192.168.0.13");//dec--->2进制-->网络字节序
 addr.sin_family = AF_INET;
 addr.sin_port = htons(10086);//端口号~65535
 //绑定Socket
 int r = bind(serverSocket, (SOCKADDR*)&addr, sizeof(addr));
 if (r == -1)
 {
  cout << "bind失败!\n" << endl;
  return -1;
 }
 cout << "bind成功!\n" << endl;
 //listen
 r = listen(serverSocket, 10);
 if (r == -1)
 {
  cout << "listen失败!\n" << endl;
  return -1;
 }
 cout << "listen成功!\n" << endl;
 //连接
 //地址族
 SOCKADDR_IN cAddr = { 0 };
 int len = sizeof cAddr;
 
 //SOCKET clientSocket[1024];
 int i = 0;
 while (i < 1024)
 {
  clientSocket[i++] = accept(serverSocket, (sockaddr*)&cAddr, &len);
  k++;
  if (clientSocket[i - 1] == SOCKET_ERROR)
  {
   cout << "错误的客户端!\n" << endl;
   closesocket(serverSocket);
   WSACleanup();
   return -1;
  }
  cout << "有客户端接入进来!" << inet_ntoa(cAddr.sin_addr) << endl;
  CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)communication, (LPVOID)i, NULL, NULL);
 }
 
 
 //closesocket(clientSocket);
 //closesocket(serverSocket);
 //WSACleanup();
 return 0;
}

客户端


#include "pch.h"
#include <iostream>
#include "winsock2.h"
#include "stdlib.h"
#include "stdio.h"
#include "string"
#pragma comment (lib, "ws2_32.lib")
 
//#include "graphics.h"
 
using namespace std;
 
SOCKET serverSocket;//服务器
 
 
void recvAndShow()
{
 int r, i = 0;
 char buff[256];
 //ofstream out;
 while (1)
 {
  memset(buff, 0, 256);
  r = recv(serverSocket, buff, 255, NULL);
  if (r > 0)
  {
  // out.open("QQ.txt", ios::app||ios::_Nocreate);
  // out << buff << endl;
   //outtextxy(0, i * 20, buff);
   i++;
   //out.close();
  }
 }
}
 
int main()
{
 //initgraph(300, 300, SHOWCONSOLE);
 //加载socket库 版本号
 
 WSADATA wsaData;
 WSAStartup(MAKEWORD(2, 2), &wsaData) != 0;//成功==0
 if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
 {
  cout << "请求版本失败!\n" << endl;
  return -1;
 }
 cout << "请求版本成功!\n" << endl;
 
 //创建socket
 
 serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 if (serverSocket == INVALID_SOCKET)
 {
  cout << "创建socket失败!\n" << endl;
  return -1;
 }
 cout << "创建socket成功!\n" << endl;
 
 //地址族
 
 SOCKADDR_IN addr = { 0 };
 
 //初始化地址
 
 addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");// htonl(INADDR_ANY);//inet_addr("192.168.0.13");//dec--->2进制-->网络字节序
 addr.sin_family = AF_INET;
 addr.sin_port = htons(10086);//端口号~65535尽量大于1W
 
 //连接到服务器
 
 int r = connect(serverSocket, (SOCKADDR*)&addr, sizeof addr);
 if (r == -1)
 {
  cout << "连接服务器失败!\n" << endl;
  return -1;
 }
 cout << "连接服务器成功!\n" << endl;
 
 CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)recvAndShow, NULL, NULL, NULL);
 
 char buff[256];
 while (1)
 {
  memset(buff, 0, 256);
  cout << "你要发啥?\n" << endl;
  cin >> buff;
  r = send(serverSocket, buff, strlen(buff), NULL);
  if (r > 0)
  {
   cout << "发送" << r << "字节到服务器成功!\n" << endl;
  }
 
 }
 //closesocket(serverSocket);
 //WSACleanup();
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。 

--结束END--

本文标题: C++基于socket编程实现聊天室功能

本文链接: https://www.lsjlt.com/news/129564.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++基于socket编程实现聊天室功能
    本文实例为大家分享了C++基于socket编程实现聊天室的具体代码,供大家参考,具体内容如下 服务端 // server.cpp : 此文件包含 "main" 函数。程序执行将在...
    99+
    2022-11-12
  • C#基于Socket实现简单聊天室功能
    因为这段时间在学习Socket,所以就试着写了一个简单的聊天室。主要分为服务器端和多个客户端。利用服务器端作数据中转站,实现消息群发。 1、服务器端有两个类: using Syste...
    99+
    2022-11-13
  • C++基于socket UDP网络编程实现简单聊天室功能
    本文实例为大家分享了C++基于socket UDP实现简单聊天室功能的具体代码,供大家参考,具体内容如下 0.通信步骤流程图 (左:服务器;右:客户端;) 1.服务器代码 1.1服...
    99+
    2022-11-12
  • C++基于socket UDP网络编程如何实现聊天室功能
    这篇文章主要介绍C++基于socket UDP网络编程如何实现聊天室功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下0.通信步骤流程图(左:服务器;右:客户端;)1.服务器代码1.1服务器类头文件(CS...
    99+
    2023-06-20
  • 基于C++实现TCP聊天室功能
    本文实例为大家分享了C++实现TCP聊天室功能的具体代码,供大家参考,具体内容如下 TCPServer.cpp: // TCPServer.cpp : Defines the ...
    99+
    2022-11-12
  • C#基于WebSocket实现聊天室功能
    本文实例为大家分享了C#基于WebSocket实现聊天室功能的具体代码,供大家参考,具体内容如下 前面两篇温习了,C# Socket内容 本章根据Socket异步聊天室修改成WebS...
    99+
    2022-11-13
  • C++基于socket多线程实现网络聊天室
    本文实例为大家分享了C++基于socket多线程实现网络聊天室的具体代码,供大家参考,具体内容如下 1. 实现图解 2. 聊天室服务端:TCP_Server_Chat.cpp ...
    99+
    2022-11-12
  • C#基于Socket实现多人聊天功能
    本文实例为大家分享了C#基于Socket实现多人聊天功能的具体代码,供大家参考,具体内容如下 服务器 服务器负责接受所有客户端发来的消息,和将接受到的问题群发到其他用户。 代码: u...
    99+
    2022-11-13
  • 基于UDP实现聊天室功能
    本文实例为大家分享了UDP实现聊天室功能的具体代码,供大家参考,具体内容如下 项目结构 data.java package udp; import java.net.Inet...
    99+
    2022-11-12
  • unity使用socket编程实现聊天室功能
    本文实例为大家分享了unity使用socket实现聊天室功能的具体代码,供大家参考,具体内容如下 示例: 什么是Socket: Socket(套接字),用来描述IP地址和端口,是通...
    99+
    2022-11-12
  • android socket聊天室功能实现
    前提概要 笔者很久之前其实就已经学习过了socket,当然也是用socket做过了聊天室,但是觉得此知识点比较一般,并无特别难的技术点,于是也并未深究。 然而近期一个项目中对...
    99+
    2022-06-06
    socket Android
  • Java Socket实现聊天室功能
    本文实例为大家分享了Java Socket实现聊天室的具体代码,供大家参考,具体内容如下 1 创建登录判断类UserLogin import java.util.HashSet; i...
    99+
    2022-11-13
  • Java基于Socket实现多人聊天室
    本文实例为大家分享了Java基于Socket实现简易版多人聊天室的具体代码,供大家参考,具体内容如下 一、 聊天室需求 1、一个服务端,多个客户端;2、实现客户端和服务端的交互;3、...
    99+
    2022-11-13
  • Java基于NIO实现聊天室功能
    本文实例为大家分享了Java基于NIO实现聊天室功能的具体代码,供大家参考,具体内容如下 Sever端 package com.qst.one; import java.io....
    99+
    2022-11-12
  • Android 基于Socket的聊天室实例
    Socket是TCP/IP协议上的一种通信,在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行...
    99+
    2022-06-06
    聊天室 socket Android
  • C#基于Socket的TCP通信实现聊天室案例
    本文实例为大家分享了C#基于Socket的TCP通信实现聊天室的具体代码,供大家参考,具体内容如下 一、Socket(套接字)通信概念 套接字(socket)是通信的基石,用于描述I...
    99+
    2022-11-13
  • c#基于WinForm的Socket实现简单的聊天室 IM
    目录1:什么是Socket2:客服端和服务端的通信简单流程3:服务端Code:4:客服端Code:5:测试效果:6:完整Code GitHUb下载路径 7:这个只是一个简单...
    99+
    2022-11-12
  • C#如何基于Socket实现多人聊天功能
    这篇文章主要介绍C#如何基于Socket实现多人聊天功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下服务器服务器负责接受所有客户端发来的消息,和将接受到的问题群发到其他用户。代码:using ...
    99+
    2023-06-29
  • 如何使用C#基于WebSocket实现聊天室功能
    这篇文章将为大家详细讲解有关如何使用C#基于WebSocket实现聊天室功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。ServerHelper:using System;using ...
    99+
    2023-06-29
  • node+socket实现简易聊天室功能
    本文实例为大家分享了node+socket实现简易聊天室的具体代码,供大家参考,具体内容如下 服务端 const net = require('net') const serv...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作