基于TCP/IP的局域网聊天室---C语言

具备注册,群聊,查看在线人员信息,私发文件和接收文件功能,因为每个客户端只有一个属于自己的socket,所以无论客户端是发聊天消息还是文件都是通过这一个socket发送,

这也意味着服务器收发任何消息或文件都只能有一个select函数也意味着只能有一个收发消息的线程。

所以我定义了一个通用结构体:

struct snd{

char msg[30];    //消息性质,同时也是普通聊天消息..

int soc;        //套接字

int count;        //用户账号

char filename[20];    //文件发送时的文件名

int size;        //文件大小

char buffer[1024];    //每次fread读取文件时的大小

};

第一个字符串msg时用来保存消息的性质,是聊天消息 还是文件发送消息 还是菜单命令消息,我的处理方法有点"偷懒",应该是有点蠢..

因为文件发送时msg保存的字符串就是"FILE",服务器只要判断它的字符串是"FILE"就认为它时文件消息并把它转发给指定客户端。

而msg[30]在结构体是聊天消息的情况下保存的就是聊天的消息,如果msg不是我指定的字符串的话服务器就会把它当聊天消息转发,所以如果我在聊天室输入"FILE"并发送…你懂的,BUG就出现了。

收发文件我是在服务器收发线程中加入文件收发的函数,判断收到的是文件就跳入此函数,所以可能会出现两个客户端发送接收文件时其他客户端群聊消息接收有延迟,不过我没测试过….

瑕疵很多,还有很多需要改进的地方,望各位前辈海涵。

上代码:

服务器↓

客户端↓

原文地址:https://www.cnblogs.com/wallbreakerx/p/9418684.html

时间: 2024-11-09 03:40:17

基于TCP/IP的局域网聊天室---C语言的相关文章

基于EPOLL模型的局域网聊天室和Echo服务器

一.EPOLL的优点 在Linux中,select/poll/epoll是I/O多路复用的三种方式,epoll是Linux系统上独有的高效率I/O多路复用方式,区别于select/poll.先说select/poll的缺点,以体现epoll的优点. select: (1)可监听的socket受到限制,在32位的系统中,默认最大值为1024. (2)采用轮询方式,当要监听的sock数量很大时,效率低. (3)随着要监听socket数据的增加,要维护一个存放大量fd的数据结构,系统开销太大. pol

简单 《实现局域网聊天室》----待更新...

先运行一个java写的局域网聊天,效果图如下 后使用c#图形修改如下: c#代码: servlet服务端 using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading; using System.IO; using System.T

基于LINUX的多功能聊天室

原文:基于LINUX的多功能聊天室 基于LINUX的多功能聊天室 其实这个项目在我电脑已经躺了多时,最初写完项目规划后,我就认认真真地去实现了它,后来拿着这个项目区参加了面试,同样面试官也拿这个项目来问我,当然我是做过一遍了,而且为了面试,我将什么strcpy,strlen等最常用的函数都自己实现了一遍,说着,我感觉自己有点挺用功的样子呢! 后来,工作也定下来了,等三方,然后继续帮助我的导师做项目,经过老师的威逼利诱下,我屈服了,又把智能家居系统作为项目,同时也是我的毕业设计,而且功能还要十分完

C# 异步通信 网络聊天程序开发 局域网聊天室开发

Prepare 本文将使用一个NuGet公开的组件技术来实现一个局域网聊天程序,利用组件提供的高性能异步网络机制实现,免去了手动编写底层的困扰,易于二次开发,扩展自己的功能. 在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控制台输入下面的指令安装: Install-Package HslCommunication NuGet安装教程  http://www.cnblogs.com/dathlin/p/7705014.html 技术支持QQ群:592132

基于 TCP/IP 协议的网络编程

在说明基于 TCP/IP 协议的网络编程之前,先来了解一下 Socket(网络套接字): 利用套接字(Socket)开发网络应用程序早已被广泛的采用,以至于成为事实上的标准 通信的两端都要有 Socket,是两台机器间通信的端点(API 原话) 网络通信其实就是 Socket 间的通信 Socket 允许程序把网络连接当成一个流,数据在两个 Socket 间通过 IO 传输 一般主动发起通信的应用程序属客户端,等待通信请求的为服务端 网络编程某种程度上可以称作"Socket 编程" T

java socket 基于TCP/IP 协议

Java socket 基于TCP/IP 协议应用 多线程服务器原理: 1.          服务器端创建serversocket并绑定要监听的端口号 ,循环调用serversoket 的accept()方法,等待客户端的连接请求 2.          客户端创建一个socket绑定服务器端的IP地址和服务器监听的端口号并请求和服务器端连接 3.          服务器端接收到客户端的请求后,创建一个socket与客户端建立专线连接 4.          建立连接的两个socket在一个

基于Select模型的混乱聊天室v1.0

最近在无聊完成了一个简单的基于select模型的匿名聊天室程序,均使用C++开发 服务器工作原理: 每接收一条客户端的信息,就将遍历所有的socket,并将该信息发给所有的客户端. 客户端使用两条线程,一个是接收服务端信息的线程,一个是等待阻塞输入的线程,获得输入时,将输入发送到服务器. 项目源码:https://github.com/coderguang/Chat 版本为v2.0的release. 其中ComLib也在github上 服务器核心代码: int main(int argc,cha

基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍。最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室。

基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍.最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室.

JAVA Socket 底层是怎样基于TCP/IP 实现的???

首先必须明确:TCP/IP模型中有四层结构:       应用层(Application Layer).传输层(Transport  Layer).网络层(Internet Layer  ).链路层(LinkLayer)  其中Ip协议(Internet Protocol)是位于网络层的,TCP协议时位于传输层的.通过Ip协议可以使可以使两台计算机使用同一种语言,从而允许Internet上连接不同类型的计算机和不同操作系统的网络.Ip协议只保证计算机能够接收和发送分组数据. 当计算机要和远程的计