资源简介
用C语言编程实现linux简单的聊天室功能。
用户程序命名为client.c;服务器程序命名为server.c
绑定端口等信息见实验方法内容;
要求client可以通过socket连接server
在client,提示输入服务器ip
若连接server 的socket建立成功,返回提示信息
Client输入的聊天内容在client端(多个client端)和server端同时显示;
多个client可同时接入server,进入聊天室,最多支持20个client;
Client端输入quit退出连接,server端提示client退出。
可选择使用多线程实现多客户端;

代码片段和文件信息
/******* 服务器程序(server.c) ************/
#include
#include
#include
#include
#include
#include
#include
#include
//#include
typedef unsigned long int pthread_t;
#define MAXLINE 1000//在一条消息中最大的输出字符数
#define LISTENQ 20//最大监听队列
#define PORT 5000//监听端口
#define MAXFD 20//最大的在线用户数量
void *get_client(void *);
int sockfdi;
static int maxi=0;//maxi表示当前client数组中最大的用户的i值
static int client[MAXFD];
void recvandsend(void)//监听转发线程入口函数
{
int index=0;
int nbytes=0;
char buffer[1024];
int len;
int outindex=0;
while(1)
{
if(maxi>0)
{
memset(buffer0sizeof(buffer));
nbytes=0;
//index++;
nbytes=read(client[index++]buffersizeof(buffer));
// printf(“%d%d\n“indexclient[index]);
if(nbytes>0)
{
buffer[nbytes]=‘\0‘;
printf(“%s\n“buffer);
outindex=0;
while(outindex {
if(write(client[outindex++]buffersizeof(buffer))==-1)
{
fprintf(stderr“WriteError:%s\n“strerror(errno));
exit(1);
}
}
}
}
if(index>=maxi)
index=0;
}
pthread_exit(NULL);
}
int main(int argc char *argv[])
{
// int client_fd[LISTENQ]clientnum=0;;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_sizeportnumber;
char hello[]=“Hello! Are You Fine?\n“;
int thr_id; /* thread ID for the newly createdthread */
pthread_t p_thread; /* thread‘s struct ure */
int new_fd=0;
memset(client0sizeof(client));
if(argc!=1)
{
fprintf(stderr“Usage:%sportnumber\a\n“argv[0]);
exit(1);
}
/* 服务器端开始建立 socket 描述符 */
if((sockfd=socket(AF_INETSOCK_STREAM0))==-1)
{
fprintf(stderr“Socketerror:%s\n\a“strerror(errno));
exit(1);
}
/* 服务器端填充 sockaddr 结构 */
bzero(&server_addrsizeof(struct sockaddr_in));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
server_addr.sin_port=htons(PORT);
/* 捆绑 sockfd 描述符 */
if(bind(sockfd(struct sockaddr *)(&server_addr)sizeof(struct sockaddr))==-1)
{
fprintf(stderr“Binderror:%s\n\a“strerror(errno));
exit(1);
}
printf(“服务器监听端口%d...\n“PORT);
/* 监听 sockfd 描述符 */
if(listen(sockfdLISTENQ)==-1)
{
fprintf(stderr“Listenerror:%s\n\a“strerror(errno));
exit(1);
}
thr_id =pthread_create(&p_thread NULL recvandsend NULL);
printf(“欢迎来到本聊天室\n“);
while(1)
{
/* 服务器阻塞直到客户程序建立连接 */
if(maxi>=20)
{
printf(“以达到人数上线\n“);
continue;
}
sin_size=sizeof(struct sockaddr_in);
if((new_fd=accept(sockfd(struct sockaddr *)(&client_addr)&sin_size))==-1)
{
fprintf(stderr“Accepterror:%s\n\a“strerror(errno));
exit(1);
}
/*fprintf(stderr“Serverget connection from %s\n“inet_ntoa(client_addr.sin_a
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2020-05-07 21:37 LTS\
目录 0 2020-05-07 21:36 LTS\fwq\
文件 79 2020-05-07 21:36 LTS\fwq\Makefile
文件 3389 2020-05-07 21:36 LTS\fwq\server.c
文件 13472 2020-05-07 21:36 LTS\fwq\weserver
目录 0 2020-05-07 21:36 LTS\khd\
文件 2587 2020-05-07 21:36 LTS\khd\client.c
文件 78 2020-05-07 21:36 LTS\khd\Makefile
文件 13512 2020-05-07 21:36 LTS\khd\weclient
文件 295453 2020-05-07 21:33 LTS\聊天室大作业.docx
- 上一篇:鼠标脚本精灵.rar
- 下一篇:基于c++的RSA加密解密程序及源码
相关资源
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
评论
共有 条评论