![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
聊天小项目
傻不拉几的程序员
开放、共享、合作,共赢;
展开
-
linux下的图像传输(利用共享内存实现图像传输)
共享内存是进程之间通信最快的方式。client将图像数据读入共享内存,server从共享内存中读取数据。采用共享内存中的一个字符作为标志位实现共享内存的同步。server.c// server:读取共享内存图像数据#include "comm.h"static int SHMID = 0;static unsigned char *ADDR = NULL;voi...原创 2020-04-04 17:09:36 · 2399 阅读 · 0 评论 -
聊天小程序(十二)采用共享内存实现进程间通信的图像传输
需求:共享内存是实现进程间通信最快的方式。linux下采用进程间通信实现图像传输,使客户端之间能进行图像传输。原创 2020-03-22 23:24:19 · 579 阅读 · 0 评论 -
基于Linux的聊天小程序,前期总结
到目前为止,小小项目大改了两次。第一次实现了点对点的聊天,使用TCP套接字实现。第二次在第一次的基础上实现了多线程处理聊天事件,通过线程同步实现。我把部分核心代码贴出来,供大家交流。 总代码量上千,全部贴出来不方便。客户端和服务端都只分享主函数和线程函数。server:void recvandsend(void) //监听转发线程入口...原创 2020-03-14 21:52:47 · 318 阅读 · 0 评论 -
线程加锁与同步,pthread_mutex_lock,pthread_mutex_unlock,pthread_cond_wait和pthread_cond_signal
线程之间的同步是通过临界资源来实现的。简言之,临界资源就是全局变量,而同步就是一个线程使另个线程的条件成立,唤醒阻塞的线程,然后将CPU控制权给它,此时为了防止线程混乱,最好将自己的条件变为假,等待另一个线程使自己的条件为真。注意事项: 1)一个线程调用pthread_cond_wait()阻塞等待时,后面的代码不会再执行。而当另一线程调用唤醒该线程后,该线程继...原创 2020-03-09 22:38:41 · 1057 阅读 · 1 评论 -
聊天小程序(十一)扩展:实现注册功能
需求:当客户端发送不同类型的消息时,处理不同类型的信息。消息目的可以为读取配置文件信息,或者获取服务器ip、mac地址等其他信息。方案:采用多线程处理方式。待实现。...原创 2020-02-27 21:07:11 · 132 阅读 · 0 评论 -
聊天小程序(十)增强代码的健壮性
需求:当连接失败、服务器拒绝连接等其他情况出现时,客户端能正常处理并不会产生core dunp分析:情况一:客户端连接服务器时,服务器拒绝未启动 或者以启动但拒绝连接;情况二:客户端创建消息处理线程时创建失败;暂时解决情况一;client.c:#include <stdio.h>#include <string.h>#include <u...原创 2020-02-24 22:46:12 · 167 阅读 · 0 评论 -
聊天小项目(九)封装成bin包,支持一键安装
需求:将文件分装成bin包,支持一键安装并原创 2020-02-23 21:48:41 · 385 阅读 · 0 评论 -
聊天小项目(八)选择通信方式(UDP/TCP)
需求:用户可以选择UDP或者TCP进行通信思路:用户之间可以选择同种通信方式,当用户之间选择不同的通信协议时,需要进行怎么处理。原创 2020-02-23 20:53:44 · 306 阅读 · 0 评论 -
聊天小项目(七)对输入的文字进行加密
需求:为了增加聊天的安全性,对聊天的文字进行加密处理。原创 2020-02-23 20:00:00 · 257 阅读 · 0 评论 -
聊天小项目(六)不同网段的点对点通信
需求:之前的通信方式是在同一个IP上进行通信,现在需要在同一局域网的不同IP上通信。原创 2020-02-23 18:56:44 · 443 阅读 · 0 评论 -
聊天小程序(五)客户端退出
需求:客户端断开连接后,能保证下次连接正常。解决方法:当客户端断开后,服务端从链表中删除该节点。当客户端重新连接时,则插入到链表中。...原创 2020-02-23 12:49:45 · 188 阅读 · 0 评论 -
聊天小项目(四)俩人通信
需求:实现一对一通信server.c#include <stdio.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <stdlib.h>#include <ne...原创 2020-02-22 22:39:19 · 185 阅读 · 0 评论 -
聊天小项目(三)显示姓名
需求:客户端输入服务端的IP后连接服务端,连上后继续输入姓名并发送服务端,服务端收到姓名后保存。服务端以后转发的消息包含该客户端的姓名。...原创 2020-02-21 22:35:46 · 182 阅读 · 0 评论 -
聊天小项目(三)转发消息到其他客户端
客户端A发送消息,服务端转发消息给其他客户端。服务端;#include <stdio.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <stdlib.h>#inclu...原创 2020-02-21 01:12:35 · 191 阅读 · 0 评论 -
聊天小项目(二)read阻塞问题解决
阻塞情况下,客户端发送的消息服务端无法接受。改用recv替换read。原创 2020-02-20 22:55:50 · 879 阅读 · 0 评论 -
聊天小项目(二)一对一聊天之服务端链表化
改版:用链表结收客户端的链接。server.c#include <stdio.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <stdlib.h>#include &...原创 2020-02-20 20:53:10 · 510 阅读 · 0 评论 -
创建两个人的聊天室
思路:在客户端连上时判断是否达到最大连接数(此时的最大连接数为2),若达到,则发送cose信息给客户端,客户端退出当前进程。原创 2020-02-20 00:48:33 · 419 阅读 · 0 评论 -
Linux下获取本地IP、mask等网卡信息
网卡的信息储存在一个叫 ifreq 的结构体里面,获取本地IP实质上是从该结构体取想要的信息。该结构体如下:#define IFHWADDRLEN 6 #define IFNAMSIZ IF_NAMESIZE struct ifreq { union { char ifrn_name[IFNAMSIZ]; // Interface name, e.g...原创 2020-02-16 20:02:12 · 1069 阅读 · 0 评论 -
window获取网卡信息
实质上对结构体IP_ADAPTER_INFO的遍历,该结构体包含本地计算机某一个网络适配器的信息。#define MAX_ADAPTER_NAME_LENGTH 256#define MAX_ADAPTER_DESCRIPTION_LENGTH 128#define MAX_ADAPTER_ADDRESS_LENGTH 8typedef struct _IP_ADAPTER_INFO ...原创 2020-02-16 09:52:32 · 1372 阅读 · 0 评论 -
聊天小项目之多客户端聊天
第二步:多用户同时在线聊天需求分析:能支持对个用户同时聊天,实现群聊功能;方法分析:采用多线程处理方式。不同的客户端开启不同的工作线程,共享同一进程的内存信息。服务端转发某一客户端发送的信息给其他客户端,实现信息实时共享。服务端代码:# server.c#include <stdio.h>#include <string.h>#include <...原创 2020-02-07 19:40:26 · 329 阅读 · 0 评论 -
聊天小项目之UDP通信模块
打算利用所学知识写一个基于UDP的聊天小项目,大致分为几个阶段:1、网络通信模块封装;2、客户端发送消息模块封装;3、服务端接受消息模块封装;服务端代码:#include <stdio.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#inclu...原创 2020-02-04 15:27:52 · 269 阅读 · 0 评论