概述
基于linux下的聊天程序设计与实现
一、 实现的内容及要求:
用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退出。
- 可选择使用多线程实现多客户端;
- 其他细节见输出结果;
二、方法及内容
1. 需要的头文件
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>
#include<unistd.h>
#include<pthread.h>
2. 主要的常量变量
客户端:
#define TRUE 1
#define PORT 5000
int quit=0; //quit表示是否用户确定退出
服务器端:
#define MAXLINE 1000 //在一条消息中最大的输出字符数
#define LISTENQ 20 //最大监听队列
#define PORT 5000 //监听端口
#define MAXFD 20 //最大的在线用户数量
void *get_client(void *);
int i,maxi=-1;//maxi表示当前client数组中最大的用户的i值
int client[MAXFD];
3.主要模块
客户端:
intmain(void)
void*get_server(void* sockfd)
//get_server函数,用于接受服务器转发的消息
服务器端:
intmain()
void*get_client(void *sockfd) //运行get_client函数,处理用户请求
三.完整代码实现
注:参考socket编程
/******* 客户端程序client.c ************/
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define TRUE 1
#define PORT 5000
static int sockfd;
void recvfromserver() //接受服务器消息线程入口函数
{
charmes[1024];
int nbytes=0;
while(1)
{
memset(mes,0,sizeof(mes));
nbytes=read(sockfd,mes,sizeof(mes));
if(nbytes>0)
{
mes[nbytes]='