天津市哪里有做网站的,如何不备案做购物网站,网站建设与管理学习什么,wordpress 百度百科转载#xff1a;http://www.360doc.com/content/16/0421/11/478627_552531090.shtml
利用多线程实现linux下C语言的聊天室程序#xff1a; 客户端代码#xff1a; threadsend线程负责客户端消息的发送#xff1b; threadrecv线程负责客户端接受服务器端的消息。 [html] v…转载http://www.360doc.com/content/16/0421/11/478627_552531090.shtml
利用多线程实现linux下C语言的聊天室程序 客户端代码 threadsend线程负责客户端消息的发送 threadrecv线程负责客户端接受服务器端的消息。 [html] view plain copy #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负责接受客户端信息。 [html] view plain copy #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 15636 void *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参数就可以了。 运行结果 客户端 [html] view plain copy [rootlocalhost unixIO]# ./echoclient connected hello! client send OK goodmorning client send OK server : goodmorning too! server : how r u? fine client send OK 服务器端 [html] view plain copy [rootlocalhost unixIO]# ./echoserver Accepted! client : hello! client : goodmorning goodmorning too! server send OK how r u? server send OK client : fine