C++socket 프로 그래 밍 기반 채 팅 방 기능 구현

6194 단어 C++채 팅 방
본 논문 의 사례 는 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 << "      !
" << endl; return -1; } cout << " !
" << 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 !
" << endl; return -1; } cout << " socket !
" << 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 !
" << endl; return -1; } cout << "bind !
" << endl; //listen r = listen(serverSocket, 10); if (r == -1) { cout << "listen !
" << endl; return -1; } cout << "listen !
" << 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 << " !
" << 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 << "      !
" << endl; return -1; } cout << " !
" << endl; // socket serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (serverSocket == INVALID_SOCKET) { cout << " socket !
" << endl; return -1; } cout << " socket !
" << 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 << " !
" << endl; return -1; } cout << " !
" << endl; CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)recvAndShow, NULL, NULL, NULL); char buff[256]; while (1) { memset(buff, 0, 256); cout << " ?
" << endl; cin >> buff; r = send(serverSocket, buff, strlen(buff), NULL); if (r > 0) { cout << " " << r << " !
" << endl; } } //closesocket(serverSocket); //WSACleanup(); return 0; }
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기