• 大小: 4KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-23
  • 语言: C/C++
  • 标签: socket  多人聊天  

资源简介

本次实验利用TCP/IP, 语言环境为 C/C++ 利用套接字Socket编程,以及线程处理, 实现Server/CLient 之间多人的聊天系统的基本功能。

资源截图

代码片段和文件信息

/* TCPClient.cpp  -- 用于传递struct */
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define    BUFLEN        2000                  // 缓冲区大小
#define WSVERS        MAKEWORD(2 0)        // 指明版本2.0 
#pragma comment(lib“ws2_32.lib“)         // 指明winsock 2.0 Llibrary

/*------------------------------------------------------------------------
 * main - TCP client for DAYTIME service
 *------------------------------------------------------------------------
 */
    
    SOCKET    socksockets[100] = {NULL};                          /* socket descriptor            */
//    int    cc;                                /* recv character count            */
    char    *packet = NULL;               /* buffer for one line of text    */
    char *pts*input;
    HANDLE hThread;
    unsigned threadID;

unsigned int __stdcall Chat(PVOID PM ) 
{
       time_t    now;
      (void) time(&now);
       pts = ctime(&now);
       char buf[2000];

while(1)
{
    int cc = recv(sock buf BUFLEN 0);   //cc为接收的字符数
    if(cc == SOCKET_ERROR|| cc == 0)
    {
        printf(“Error: %d.----“GetLastError());
        printf(“与服务器断开连接!\n“);
        CloseHandle(hThread);
        (void)closesocket(sock);
        break;
    }
    else if(cc > 0) 
    {
    //    buf[cc] = ‘\0‘;
        printf(“%s\n“buf);
    //    printf(“输入数据(exit退出):  \n“);
    }     
}
    return 0;
}

int main(int argc char *argv[])
{
    time_t    now;
     (void) time(&now);
       pts = ctime(&now);
    char    *host = “127.0.0.1“;        /* server IP to connect         */
//    char    *host = “172.18.33.155“;
//    char    *host = “172.18.33.93“;
//    char    *host = “172.18.187.1“;
    char *service = “5050“;          /* server port to connect       */
//    char *service = “50000“;
    struct  sockaddr_in sin;            /* an Internet endpoint address    */
    WSADATA wsadata;
    WSAStartup(WSVERS &wsadata);       /* 启动某版本Socket的DLL        */        

    memset(&sin 0 sizeof(sin));
    sin.sin_family = AF_INET;
    sin.sin_port = htons((u_short)atoi(service));    //atoi:把ascii转化为int. htons:主机序(host)转化为网络序(network) s--short
    sin.sin_addr.s_addr = inet_addr(host);           //如果host为域名,需要先用函数gethostbyname把域名转化为IP地址

    sock = socket(PF_INET SOCK_STREAM0);

    connect(sock (struct sockaddr *)&sin sizeof(sin));

    printf(“\t\t\t\tChat 多人聊天程序 \n“);
    printf(“\t\t\t\t       (Client) \n“);
    hThread = (HANDLE)_beginthreadex(NULL 0Chat NULL 0 &threadID);    
    printf(“ \t\t\t\t 【您可以自由发言】\n\n“);
while(1)
{
    char buf1[2000];
    
    //     scanf(“%s“&buf1);
    
         gets(buf1);
         if(!strcmp(buf1 “exit“))
             goto end;

        (void) send(sockbuf1 sizeof(buf1) 0);
        (void) time(&now);
        pts = ctime(&now);
       printf(“ 发送成功! ------时间: %

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        3352  2017-10-29 10:11  socket多人聊天\client2.cpp
     文件        5310  2017-10-29 09:58  socket多人聊天\server2.cpp
     文件         275  2017-10-29 10:32  socket多人聊天\提示.txt

评论

共有 条评论