Linux下C语言多线程,网络通信简单聊天程序

Linux下C语言多线程,网络通信简单聊天程序

ID:42563306

大小:26.26 KB

页数:7页

时间:2019-09-17

Linux下C语言多线程,网络通信简单聊天程序_第1页
Linux下C语言多线程,网络通信简单聊天程序_第2页
Linux下C语言多线程,网络通信简单聊天程序_第3页
Linux下C语言多线程,网络通信简单聊天程序_第4页
Linux下C语言多线程,网络通信简单聊天程序_第5页
资源描述:

《Linux下C语言多线程,网络通信简单聊天程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux下C语言多线程,网络通信简单聊天程序功能描述:程序应用多线程技术,可是实现1对N进行网络通信聊天。但至今没想出合适的退出机制,除了用Ctr+C。出于演示目的,这里采用UNIX域协议(文件系统套接字),程序分为客户端和服务端。应用select函数来实现异步的读写操作。     先说一下服务端:首先先创建套接字,然后绑定,接下进入一个无限循环,用accept函数,接受“连接”请求,然后调用创建线程函数,创造新的线程,进入下一个循环。这样每当有一个新的“连接”被接受都会创建一个新的线程,实现1对N的网络通信。在服务端程序中线程中用一个buffer读写,为了避免错误,这时就要给关键

2、代码加上互斥锁work_mutex,具体见代码。服务端代码1#include2#include3#include4#include5#include6#include7#include8#include//这里没有用二进制信号量可以删掉910charbuffer[1024];//读写用的区域11sem_tbin_sem;//没用到的二进制信号量,可以删掉12void*pthread_function(void*a

3、rg);//线程入口函数声明13pthread_mutex_twork_mutex;//声明互斥锁1415intmain(){16intresult;//整数变量用来储存调用函数的返回值17structsockaddr_unserver_address,client_address;//UNIX域的套接字,server_address用于服务端的监听,client_address用于客户端连接后的套接字18intclient_len;//连接后,accept函数会把客户端的地址的长度储存在这19intserver_socketfd,client_socketfd;//服务端和客户端的

4、套接字文件描述符20pthread_ta_thread;//线程ID标志21pthread_attr_tthread_attr;//线程的属性,后面可以看的,被我注释掉了,没用到,可以删掉。2223result=sem_init(&bin_sem,0,1);//初始化二进制信号量,因为用了互斥锁,所以没用到,可以删掉24if(result!=0){25perror("sem_init");26exit(EXIT_FAILURE);27}2829result=pthread_mutex_init(&work_mutex,NULL);//初始化互斥锁30if(result!=0){31p

5、error("pthread_mutex_init");32exit(EXIT_FAILURE);33}3435server_socketfd=socket(AF_UNIX,SOCK_STREAM,0);//创建套接字,用TCP连接方式,出于演示目的只用UNIX域套接字。3637server_address.sun_family=AF_UNIX;38strcpy(server_address.sun_path,"server_socket");3940unlink("server_socket");//在绑定之前,把以前存在当前目录下的套接字删除4142result=bind(ser

6、ver_socketfd,(structsockaddr*)&server_address,sizeof(server_address));//绑定43if(result!=0){44perror("bind");45exit(EXIT_FAILURE);46}4748result=listen(server_socketfd,5);//监听,最多允许5个连接请求49if(result!=0){50perror("listen");51exit(EXIT_FAILURE);52}5354client_len=sizeof(client_address);55while(1){//开始

7、进入无限循环56/*printf("Ifyouwanttoquit,pleaseenter'quit'");57printf("Doyouwanttoacceptaconnectiong");58memset(buffer,'',sizeof(buffer));59fgets(buffer,sizeof(buffer),stdin);60if((strncmp("quit",buffer,4))==0)break;*/6162client_so

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。