C语言聊天室

好久没写c 晚上写了个聊天室温习下
服务端

/*
 *     server.c
 *      请直接将本代码复制粘贴到你的编译环境中,编译且运行.
 *          运行后,可在浏览器中输入地址http://127.0.0.1/来访问server.
 *          */
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>

#pragma comment(lib , "Ws2_32.lib")

int main( int argc , char* argv[])
{
    char msg[1000];
    int serverSock , connectingSock;
    struct sockaddr_in serverAddr, client_addr;
    socklen_t addrlen , client_addr_size;

    serverSock = socket( AF_INET , SOCK_STREAM , IPPROTO_TCP);
    if( serverSock <0)
    {
        puts("socket建立失败");
        exit(1);
    }

    addrlen = sizeof(serverAddr);
    memset( &serverAddr , 0 , addrlen);
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(3333);
    serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    if( bind( serverSock , (struct sockaddr*)&serverAddr , sizeof(serverAddr) )<0)
    {
        puts("绑定IP 地址到socket失败");
        exit(1);
    }
    if(listen( serverSock , 10 ))
    {
        puts("设置socket为监听状态失败");
    }

    puts("等待客户端连接...");
    client_addr_size = sizeof(client_addr);
    connectingSock = accept( serverSock , (struct sockaddr*)&client_addr , &client_addr_size);
    if( connectingSock <0  )
    {
        puts("处理连接时发生错误");
    }
    puts("发送一个心跳");
    char sg[2] = "ss";
    if( send( connectingSock , sg, sizeof(sg) , 0) <=0 )
    {
        puts("发送消息失败");
    }else{
        puts("发送消息成功");
    }
    while(1){
        memset( msg , 0 , 1000) ;
        if ( recv( connectingSock , msg , 999 , 0) <= 0 )
        {
            puts("接收消息失败");
        }else{
            puts( msg);
        }
        char send_msg[200] ;
        puts("请输入聊天内容");
        scanf("%s", send_msg);
        if( send( connectingSock , send_msg, strlen(send_msg ) , 0) <=0 )
        {
            puts("发送消息失败");
        }else{
            puts("发送消息成功");
        }
    }
}

客户端:

/*
 *     server.c
 *      请直接将本代码复制粘贴到你的编译环境中,编译且运行.
 *          运行后,可在浏览器中输入地址http://127.0.0.1/来访问server.
 *          */
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>

#pragma comment(lib , "Ws2_32.lib")
void error_handling(char *message);

int main( int argc , char* argv[])
{
    char msg[1000];
    int client_sock ;
    struct sockaddr_in client_addr  ,server_addr;
    int addrlen, strlen ;
    char message[20];

    client_sock = socket( AF_INET , SOCK_STREAM , IPPROTO_TCP);
    if( client_sock <0)
    {
        puts("socket建立失败");
        exit(1);
    }
    puts("socket成功建立");

    addrlen = sizeof(client_addr);
    memset( &client_addr , 0 , addrlen);
    client_addr.sin_family = AF_INET;
    client_addr.sin_port = htons(3333);
    client_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    if(connect(client_sock, (struct sockaddr*)&client_addr, sizeof(client_addr)) == -1)
        error_handling("connect error");
    while(1){
        memset( msg , 0 , 1000) ;
        if ( recv( client_sock , msg , 999 , 0) <= 0 )
        {
            puts("接收消息失败");
        }else{
            puts( msg);
        }
        char send_msg[200] ;
        puts("请输入聊天内容");
        scanf("%s", send_msg);
        if( send( client_sock , send_msg, sizeof(send_msg) , 0) <=0 )
        {
            puts("发送消息失败");
        }else{
            puts("发送消息成功");
        }
    }
    //return 0;
}
void error_handling(char * message){

    puts(message);
    exit(1);

}
  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Linux系统提供了各种系统调用API用于进程之间的通信:    无名管道PIPE    命名管道FIFO    消息队列    共享内存    信号量    文件锁    信号signal....其中还包括system V和POSIX 两种接口标准,除此之外,Linux系统自身还扩展了自己的一套API接口用于进程间通信,比如signalfd、timerfd、eventfd等。本视频教程为《Linux系统编程》第05期,本期课程将会带领大家学习Linux下将近15种进程间通信IPC工具的使用,了解它们的通信机制、编程实例、使用场景、内核中的实现以及各自的优缺点。本课程会提供PDF版本的PPT课件和代码,学员购买课程后可到课程主页自行下载嵌入式自学路线指导图:------------------------------------------------------------------------------------------------------                   《嵌入式工程师自我修养》嵌入式自学系列教程                                          作者:王利涛------------------------------------------------------------------------------------------------------一线嵌入式工程师精心打造,嵌入式学习路线六步走: 第 1 步:Linux三剑客零基础玩转Linux+UbuntuGit零基础实战:Linux开发技能标配vim从入门到精通基础篇:零基础学习vim基本命令vim从入门到精通定制篇:使用插件打造嵌入式开发IDEmakefile工程实践基础篇:从零开始一步一步写项目的Makefilemakefile工程实践第2季:使用Autotools自动生成Makefile软件调试基础理论printf打印技巧Linux内核日志与打印使用QEMU搭建u-boot+Linux+NFS嵌入式开发环境第 2 步:C语言嵌入式Linux高级编程第1期:C语言进阶学习路线指南第2期:计算机架构与ARM汇编程序设计第3期:程序的编译、链接和运行原理第4期:堆栈内存管理第6期:数据存储与指针第7期:嵌入式数据结构与Linux内核的OOP思想第8期:C语言的模块化编程第9期:CPU和操作系统入门      搞内核驱动开发、光会C语言是不行的!      你还需要学习的有很多,包括:计算机体系架构、ARM汇编、程序的编译链接运行原理、CPU和操作系统原理、堆栈内存管理、指针、linux内核中的面向对象思想、嵌入式系统架构、C语言的模块化编程.....第 3 步:Linux系统编程第00期:Linux系统编程入门第01期:揭开文件系统的神秘面纱第02期:文件I/O编程实战第03期:I/O缓存与内存映射第04期:打通进程与终端的任督二脉第05期:进程间通信-------------------we are here!‍    第 4 步:Linux内核编程‍    练乾坤大挪移,会不会九阳神功,是一道坎。搞驱动内核开发,懂不懂内核也是一道坎。第 5 步:嵌入式驱动开发    芯片原理、datasheet、硬件电路、调试手段、总线协议、内核机制、框架流程....第 6 步:项目实战    嵌入式、嵌入式人工智能、物联网、智能家居...
### 回答1: Linux C语言聊天室是一种基于Linux操作系统和C语言编写的网络聊天工具,它可以实现多人在线聊天、私聊、文件传输等功能。通过使用socket编程和多线程技术,可以实现客户端和服务器之间的通信和数据传输。该聊天室可以应用于各种场景,如企业内部通讯、在线教育、社交娱乐等。 ### 回答2: Linux C语言聊天室是一个典型的客户端/服务器模型应用程序,它在Linux操作系统上使用C语言编写。该聊天室程序能够实现多个用户之间的文本通信和文件传输,具有实时性和可靠性的特点。 在实现聊天室程序时,首先需要考虑的是服务器端的搭建。服务器端主要负责接收用户的连接请求,创建相应的线程或子进程来处理连接请求,然后分配IP地址和端口号等网络信息给连接的客户端。服务器端还需要维护用户连接状态和用户消息记录,对不同的客户端之间的通信进行转发和管理。 客户端主要负责向服务器端发送连接请求,获取服务器端分配的网络信息,然后与服务器端进行通信,发送和接收文本消息以及传输文件等,实现与其他客户端的实时通信。 在实现聊天室程序时,需要使用一些Linux的系统调用和网络编程API,如socket、bind、listen、accept、connect、select等,使用多线程或多进程的方式来处理连接请求,实现多个客户端之间的通信和管理。同时需要考虑程序的安全性和稳定性,比如对用户的输入进行检查、处理异常情况的处理等。 总之,Linux C语言聊天室是一项复杂而有挑战性的任务,需要深入掌握Linux操作系统的知识和底层编程技术,具备较强的编程能力和实践经验,才能开发出高质量、可靠性高、效率高的聊天室程序。 ### 回答3: Linux C语言聊天室是一个基于Linux系统的网络应用,它通过使用C语言编程实现客户端与服务端之间的即时通信,实现两端实时聊天的功能。它是一种特殊的网络应用,因为客户端和服务端之间的通信是实时的,并且需要处理大量的数据和连接请求。 在实现Linux C语言聊天室时,需要考虑多个因素,例如通信方式、数据格式、协议等等。对于通信方式,可以选择TCP或UDP协议,其中TCP协议是基于连接的,提供可靠的传输服务,而UDP协议是无连接的,提供不可靠的传输服务。在选择TCP或UDP协议时,需要根据具体的需求和应用场景进行选择。 对于数据格式,需要定义规范的数据包结构,以便客户端和服务端之间正确地识别和解析数据。数据包结构通常包括数据长度、指令类型、数据内容等字段,对于不同类型的数据需要定义不同的指令类型。在数据传输时,需要对数据进行压缩和加密解密等操作,以保证数据的安全性和可靠性。 在协议方面,需要定义通信协议和数据传输协议。通信协议是指客户端和服务端之间的通信规范,可以采用自己定义的协议或者使用已有的协议。数据传输协议是指客户端和服务端之间传递数据的协议,比如HTTP、FTP等。 最后,Linux C语言聊天室需要考虑的一个重要因素是安全性。在实现聊天室时需要防范各种安全攻击,比如SQL注入、缓冲区溢出等。此外,还需要对聊天记录进行安全管理,以保证用户的隐私和数据安全。 总之,实现Linux C语言聊天室是一个复杂的过程,需要考虑多个因素并进行适当的技术选型和开发实现。只有在合理设计和严格实现的基础上,才能保证聊天室的稳定性、安全性和可靠性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值