基于linux下控制台,多线程并发控制的聊天程序(服务器端)
2009-09-24 17:29
423 查看
废话不多说了
把源代码贴上来吧
留作以后学习的参考和回顾
涉及多线程,DGRAM socket编程
编译: gcc -lpthread -o talk talk.c
运行可执行文件:./talk
然后就可以自由的聊天了
可以连续发送,连续接受
带清屏幕效果
把源代码贴上来吧
留作以后学习的参考和回顾
涉及多线程,DGRAM socket编程
#include <pthread.h> #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <netdb.h> #include <sys/socket.h> #include <netinet/in.h> #include <sys/types.h> #include <arpa/inet.h> #define PORT 4000 #define MAXBUFLEN 100 char recvbuf[MAXBUFLEN]; char sendbuf[MAXBUFLEN]; char dialog[MAXBUFLEN*8]; struct sockaddr_in their_addr; struct sockaddr_in my_addr; int sockfd; void fatal(char *mes) { perror(mes); exit(1); } void getmessage(void) { while(1) { int sock_len=sizeof(struct sockaddr); int numget; if((numget=recvfrom(sockfd,recvbuf,MAXBUFLEN,0, (struct sockaddr *)&their_addr,&sock_len))==-1) fatal("recvfrom"); recvbuf[numget]='/n'; recvbuf[numget+1]='/0'; //take care of next expression,maybe error will be brought strcat(dialog,recvbuf); system("clear"); printf("%s",dialog); } } int main() { pthread_t tid; int rtn; dialog[0]='/0'; if((sockfd=socket(AF_INET,SOCK_DGRAM,0))==-1) fatal("socket"); my_addr.sin_family=AF_INET; my_addr.sin_port=htons(PORT); my_addr.sin_addr.s_addr=INADDR_ANY; bzero(&(my_addr.sin_zero),8); if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1) fatal("bind"); rtn=pthread_create(&tid,NULL,(void *)getmessage,NULL); if(rtn!=0) fatal("pthread_create"); while(1) { //scanf("%s",sendbuf); gets(sendbuf); sendbuf[strlen(sendbuf)]='/n'; sendbuf[strlen(sendbuf)+1]='/0'; strcat(dialog,sendbuf); system("clear"); printf("%s",dialog); if(sendto(sockfd,sendbuf,sizeof(sendbuf),0, (struct sockaddr *)&their_addr,sizeof(struct sockaddr))==-1) fatal("sendto"); } close(sockfd); exit(0); }
编译: gcc -lpthread -o talk talk.c
运行可执行文件:./talk
然后就可以自由的聊天了
可以连续发送,连续接受
带清屏幕效果
相关文章推荐
- 基于linux下控制台,多线程并发控制的聊天程序(服务器端)
- 基于C#Winform的简易聊天程序服务器端(2)
- Java 基于多客户端的ServerSocket—聊天服务器端,客户端Socket “操作文件”系统的程序拼接
- 基于socket的Linux网络聊天程序--单线程非阻塞客户端
- 轻易实现基于linux或win运行的聊天服务端程序
- 基于Linux的SOCKET编程之TCP半双工Client-Server聊天程序
- Linux 下基于多线程服务器/客服端聊天程序源码
- 基于socket的Linux上的网络聊天程序--多线程的服务器
- 轻易实现基于linux或win运行的聊天服务端程序
- Linux 控制台聊天程序
- 基于UDP的控制台聊天程序
- 轻易实现基于linux或win运行的聊天服务端程序
- 基于Linux的Socket编程之TCP全双工Server-Client聊天程序
- 基于Linux的Socket编程之TCP全双工Server-Client聊天程序
- Linux Linux函数 Linux聊天程序 基于socket的TCP(有连接的)聊天程序
- VC++ 基于UDP的控制台聊天程序socket通信
- 基于socket、多线程的客户端服务器端聊天程序
- 基于Linux的SOCKET编程之TCP半双工Client-Server聊天程序
- [C语言] 基于Linux的一对一Socket简易聊天程序实例
- JavaSE_基于TCP协议的Socket实现的控制台聊天程序