ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:19.69KB ,
资源ID:18364753      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18364753.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(linux 下用c语言编写的聊天室程序服务器和客户端Word格式文档下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

linux 下用c语言编写的聊天室程序服务器和客户端Word格式文档下载.docx

1、c_client_c *temp_c1 = NULL, *temp_c2 = NULL;/等待的/初始化client信息void init_client() int i = 0; for (i = 0; i MAX_CLIENT; i+) clienti.sockfd = -1; memset(clienti.name, 0, 20); clienti.pid = -1; clienti.flg = -1; /查找结构体数组中sockfd为-1的下标值int find_fd(c_client *client) while (i sockfd & i sockfd, buf, strlen(bu

2、f), 0);/ALLvoid sendto_all(c_client *p_client, char *buf) char sendbuf1024 = 0 ; sprintf(sendbuf, AFROMrn%srn%s, p_client-name, buf + 5); clienti.flg != -1) if(send(clienti.sockfd, sendbuf, strlen(sendbuf), 0) sockfd, sendbuf, strlen(sendbuf), 0); else FROMrn%srn%sname, buf + 4 + strlen( name) + 2);

3、 if(send(sock, sendbuf, strlen(sendbuf), 0)name); close(p_client-sockfd); p_client-sockfd = -1;pid = -1;flg = -1; sprintf(buf,NOTICE1rn%s退出聊天室rnrn memset(p_client-name,0,20); for(i=0;inext != NULL) memset(buf,0,1024); pthread_rwlock_rdlock(&idx_lock); idx = find_fd(client); pthread_rwlock_unlock(& c

4、lientidx.sockfd = head-next-sockfd; pthread_rwlock_wrlock(&wait_lock); temp = head-next; head-next = head- free(temp); sprintf(buf,NOTICErn您已被唤醒,请继续操作rnrn send(clientidx.sockfd,buf,strlen(buf),0); if (pthread_create(&clientidx.pid, NULL, (void *)pthread_fun,(void *) &clientidx) != 0) perror(pthread_

5、create pthread_detach(clientidx.pid);void pthread_fun(void* cclient) c_client *p_client = (c_client *) cclient; char bufMAX_SIZE = 0 ; int i, n; char *p;%s, NOTICErn通讯通道开启rnrn if (send(p_client-sockfd, sendbuf, strlen(sendbuf), 0) sockfd, buf, sizeof(buf) - 1, MSG_NOSIGNAL); if (n p_client- break; i

6、f (logform(buf) if (cmpname(buf, p_client) = 0) send(p_client-sockfd, ERRORrn用户名重复rnrn, 26, 0); continue; else p_client-flg = 1; p = strtok(buf + 7, strcpy(p_client-name, p); sprintf(sendbuf, 100rn%srnrnsockfd, sendbuf, sizeof(sendbuf), 0);%s进入聊天室n for (i = 0; if (clienti.sockfd ! clienti.sockfd ! s

7、end(clienti.sockfd, sendbuf, sizeof(sendbuf), 0); memset(sendbuf, 0, 1024); while (1) memset(buf, 0, MAX_SIZE); if (n = recv(p_client-sockfd, buf, MAX_SIZE, 0) ERRORrn信息不符合协议要求rnrn, 38, 0); else send(p_client-ERRORrn未登录,请您登录再进行其他操作rnrn, 56, 0); pthread_exit(NULL);int main() int ser_sockfd, clt_sockf

8、d; struct sockaddr_in addr; / pthread_rwlock_t idx_lock,wait_lock; pthread_rwlock_init(&idx_lock, NULL);wait_lock, NULL); init_client(); /创建服务器sockfd if (ser_sockfd = socket(AF_INET, SOCK_STREAM, 0) = -1) perror(socket exit(1); /设置服务器网络地址 bzero(&addr, sizeof(addr); addr.sin_family = AF_INET; addr.si

9、n_port = htons(PORT); addr.sin_addr.s_addr = htonl(INADDR_ANY); /设置端口可重用 int opt = 1; setsockopt(ser_sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt); /将套接字绑定到服务器的网络地址上 if (bind(ser_sockfd, (struct sockaddr*)&addr, sizeof(addr) = -1) bindbind successn /监听连接请求-监听队列长度为10 if (listen(ser_sockfd, 10)

10、= -1) listenlisten successn if (clt_sockfd = accept(ser_sockfd, NULL, NULL) = -1) acceptidx=%dn,idx); if (idx != -1) /连接末满 clientidx.sockfd = clt_sockfd; if (pthread_create(&clientidx.pid, NULL,(void *) pthread_fun, (void *)& perror( pthread_detach(clientidx.pid); else /连接已满,等待 temp_c1 = (c_client_c

11、 *) malloc(sizeof(c_client_c); temp_c1-sockfd = clt_sockfd;next = NULL; pthread_rwlock_wrlock(& if (head = NULL) head = (c_client_c *) malloc(sizeof(c_client_c); head-next = temp_c1; for (temp_c2 = head; temp_c2-= NULL; temp_c2= temp_c2-next); temp_c2- pthread_rwlock_unlock(& memset(buf, 0, 1024); s

12、printf(buf, NOTICErn服务器已满,请等候rnrn/客户端接受 则等待 if (send(temp_c1-sockfd, buf, strlen(buf), 0) termios.hstatic int FLAGE = -1;char name20 = 0;void fun_show(int sockfd) char sendbuf256 = 0; sprintf(sendbuf, if(send(sockfd,sendbuf,strlen(sendbuf),0) close(sockfd);void fun_all(int sockfd) char sendbufMAX_SI

13、ZE = 0;,5);输入发送的内容:n scanf(,sendbuf+5); sprintf(sendbuf+strlen(sendbuf), if(send(sockfd,sendbuf,strlen(sendbuf),0) void fun_one(int sockfd) char name320 = 0;输入聊天对象:,name3);TOrn%srn输入聊天内容:,sendbuf+strlen(sendbuf);void fun_quit(int sockfd) char sendbuf256 = ; close(sockfd);void *pthread_fun(int *sock) int sockfd

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1