【C语言】linux下简单的聊天室程序(TCP+多线程)
来源:互联网 发布:c语言int转double 编辑:程序博客网 时间:2024/06/10 01:38
利用多线程实现linux下C语言的聊天室程序:
客户端代码:
threadsend线程负责客户端消息的发送;
threadrecv线程负责客户端接受服务器端的消息。
#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>#include <pthread.h>#define MAXLINE 100;void *threadsend(void *vargp);void *threadrecv(void *vargp);int main(){int *clientfdp;clientfdp = (int *)malloc(sizeof(int));*clientfdp = socket(AF_INET,SOCK_STREAM,0);struct sockaddr_in serveraddr;struct hostent *hp;bzero((char *)&serveraddr,sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(15636);serveraddr.sin_addr.s_addr = inet_addr("127.0.0.1");if(connect(*clientfdp,(struct sockaddr *)&serveraddr,sizeof(serveraddr)) < 0){ printf("connect error\n"); exit(1);}pthread_t tid1,tid2;printf("connected\n");while(1){pthread_create(&tid1,NULL,threadsend,clientfdp);pthread_create(&tid2,NULL,threadrecv,clientfdp);}return EXIT_SUCCESS;}void *threadsend(void * vargp){//pthread_t tid2;int connfd = *((int *)vargp);int idata;char temp[100];while(1){//printf("me: \n ");fgets(temp,100,stdin);send(connfd,temp,100,0);printf(" client send OK\n");}printf("client send\n");return NULL;}void *threadrecv(void *vargp){char temp[100];int connfd = *((int *)vargp);while(1){int idata = 0;idata = recv(connfd,temp,100,0);if(idata > 0){printf("server :\n%s\n",temp);}}return NULL;}
服务器端代码:
threadsend负责服务器端发送信息;
threadrecv负责接受客户端信息。
#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>#include <pthread.h>#define PORT 15636void *thread(void *vargp);void *threadsend(void *vargp);void *threadrecv(void *vargp);int main(){int listenfd = socket(AF_INET, SOCK_STREAM,0);if(listenfd < 0){ perror("socket"); exit(1);}struct hostent *hp;struct sockaddr_in serveraddr;bzero((char *)&serveraddr,sizeof(serveraddr));serveraddr.sin_family = AF_INET;serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);serveraddr.sin_port = htons(PORT);if(bind(listenfd,(struct sockaddr *)&serveraddr,sizeof(serveraddr)) < 0){ perror("connect"); exit(1);}if(listen(listenfd,1024) < 0){ perror("listen error"); exit(1);}//char temp[100];struct sockaddr_in clientaddr;int clientlen, *connfdp;clientlen = sizeof(clientaddr);while(1){connfdp = (int *)malloc(sizeof(int));*connfdp = accept(listenfd,(struct sockaddr *)&clientaddr, &clientlen);pthread_t tid;printf("Accepted!\n");pthread_create(&tid,NULL,thread,connfdp);}EXIT_SUCCESS;}void *thread(void *vargp){pthread_t tid1,tid2;int connfd = *((int *)vargp);int idata;char temp[100];pthread_create(&tid1,NULL,threadsend,vargp);pthread_create(&tid2,NULL,threadrecv,vargp);return NULL;}void *threadsend(void * vargp){int connfd = *((int *)vargp);int idata;char temp[100];while(1){//printf("server input: ");fgets(temp,100,stdin);send(connfd,temp,100,0);printf(" server send OK\n");}return NULL;}void *threadrecv(void *vargp){char temp[100];int connfd = *((int *)vargp);while(1){int idata = 0;idata = recv(connfd,temp,100,0);if(idata > 0){printf("client :\n%s\n",temp);}}return NULL;}
问题:
linux下编译多线程代码时,shell提示找不到 pthread_create函数,原因是 pthread.h不是linux系统默认加载的库文件,应该使用类似如下gcc命令进行编译:
gcc echoserver.c -lpthread -o echoserver
只要注意 -lpthread参数就可以了。
运行结果:
客户端:
[root@localhost unixIO]# ./echoclientconnectedhello! client send OKgoodmorning client send OKserver :goodmorning too!server :how r u?fine client send OK
服务器端:
[root@localhost unixIO]# ./echoserverAccepted!client :hello!client :goodmorninggoodmorning too! server send OKhow r u? server send OKclient :fine
- 【C语言】linux下简单的聊天室程序(TCP+多线程)
- 利用多线程实现linux下C语言的聊天室程序:
- linux下基于TCP协议的多线程聊天室的搭建
- Linux下C语言多线程网络通信简单聊天程序
- Linux下C语言多线程,网络通信简单聊天程序
- 简单的Linux环境下多线程TCP服务程序框架
- 简单的Linux环境下多线程TCP服务程序框架
- Linux下基于socket和多线程的聊天室小程序
- Linux下基于socket和多线程的聊天室小程序
- Linux下C语言多线程小程序
- Linux下C语言项目—聊天室的搭建1.0
- Android 网络:基于TCP协议通信,多线程,实现简单的C/S聊天室
- Linux局域网中 TCP 多线程 Server + Client 聊天室程序源码
- Linux下C语言程序简单的编写和调试
- Linux下基于TCP的聊天室
- Linux c语言 聊天室
- Linux下的C语言多线程编程
- Linux下的C语言多线程编程
- ffmpeg结构体的关系
- 流式套接字客户端/服务器编程
- Linux系统内核中的Device Mapper机制
- MFC FillSolidRect SetBKMode绘图
- PHP: 把数组存入文件
- 【C语言】linux下简单的聊天室程序(TCP+多线程)
- 查看占用CPU、内存较多的程序及客户端
- Linux 获取并分析程序崩溃时的调用堆栈
- qsort用法总结
- 从子activity返回数据给父activity------------Starting Activities and Getting Results
- android202--trim
- C/C++中extern关键字详解
- hdu 1141
- GibbsLDA++ 使用记录