亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? s.c

?? 這是我自己寫的用c語言的聊天室
?? C
字號:
/*	s.c A chat server by Ze Zhang and Johannes Detlefsen	compile: gcc -o s s.c list.c -lpthread*/#include <stdio.h>#include <stdlib.h>		// for atoi() function#include <sys/socket.h>#include <sys/types.h>#include <errno.h>#include <netdb.h>#include <string.h>#include <sys/wait.h>#include <pthread.h>		// for the cosy POSIX threads#include <arpa/inet.h>		// for inet_ntoa() function#include <fcntl.h>#include <unistd.h>#include <sys/msg.h>#include "list.h"		// linked list to save socket file descriptors in it#define BACKLOG 10		// connections on the queue#define MAXDATALEN 1024#define PORT 9034/*initialize list*/	List L;    //Position P; //better declare local	pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;void * server(void * arg);int main( int argc, char *argv[] ) {	int sockfd,new_fd; // listen on sock_fd, new connection on new_fd	int portnum;	struct sockaddr_in server_addr;	struct sockaddr_in client_addr;	int sin_size;	pthread_t thread_id;	int sfd; /* socket file descriptor in the linked list*/	Position P;	/*check if portnumber is received by argument, if not use defined */	if( argc == 2 )	portnum = atoi(argv[1]);	 else portnum = PORT;	/*set up linked list to store the socket file descriptors */	L = MakeEmpty( NULL );	P = Header( L );	if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {            perror("socket");            exit(1);	}	/* initialize the server_addr */	server_addr.sin_family=AF_INET;	server_addr.sin_addr.s_addr = INADDR_ANY; // here we get our IP address of www.tec.hkr.se	server_addr.sin_port=htons(portnum);	memset(&(server_addr.sin_zero), '\0', 8); // zero the rest of the struct	/* bind the port to the socket */	if (bind(sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr))== -1) {		perror("bind");		exit(1);	}	/* listen if anyone connecting to the port*/	if (listen(sockfd, BACKLOG) == -1) {            perror("listen");            exit(1);        } 	else printf("server is running now!\nPlease exit after all connections closed with Ctrl-c \n");	while(1){		sin_size=sizeof(struct sockaddr_in);		if ((new_fd = accept(sockfd, (struct sockaddr *)&client_addr,&sin_size)) == -1) {			perror("accept");			continue;		}	printf("new connection accepted\n");	  /* store new file descriptors in linked list */		//sfd=new_fd;		pthread_mutex_lock(&mutex);		printf("mutex lock aquired for INSERT\n");		P = Header( L );		Insert( new_fd, L, P );	//printf("Inserted sfd -%d- on the list\n",sfd);	  	P = Advance( P );		//go to next one		PrintList( L );		pthread_mutex_unlock(&mutex);		printf("mutex INSERT unlock\n");	  printf("server got connection from %s\n",inet_ntoa(client_addr.sin_addr));	  pthread_create(&thread_id,NULL,server,(void*)&new_fd);	  // pthread_join(thread_id,NULL); say: thread attribute is detached!!!	  pthread_detach(thread_id); /* now we never ever have to wait for this one anymore	  it's easier (less code) do change a joinable thread into detached state than creating	  a detached thread... */  	}  DeleteList( L );	// clean up linked list  close(sockfd);	// close Socket}/*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx** Server function starts for every connected Client**xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/void * server(void * arg){  int msglen;  char	*buffer =(char *) malloc(MAXDATALEN),  	*msg    =(char *) malloc(MAXDATALEN),	*termmsg=(char *) malloc(30);  char	dpchar[]=": ", *strp;  char usrname[10];  int ts_fd,termlen;  ts_fd = * (int *) arg; 	/* get thread-socket file descriptor*/  int sfd; 			/* socket file descriptor in the linked list*/	Position P;  if(recv(ts_fd,usrname,MAXDATALEN,0) == -1){      printf("error: could not recv usrname!\n");	  exit(1);  }	else printf("%s connected to the server\n",usrname);	while(1){	 recv(ts_fd,buffer,MAXDATALEN,0);	 /* termination control */	 if ( strncmp( buffer, "/q", 2) == 0 ){		printf("%s has left the chat\n",usrname);		strcpy(termmsg,usrname);		strp=termmsg;		strp=strp+(strlen(termmsg));		strcpy(strp," has left the chat");		termlen=strlen(termmsg);		pthread_mutex_lock(&mutex);		printf("mutex lock aquired for DELETE\n");		Position P = Header( L );        	do{	// delete socket file descriptor from linked list            		P = Advance( P );            		sfd = Retrieve( P ); //read from list!			if(sfd == ts_fd) Delete( sfd, L );			if(sfd != ts_fd) send(sfd,termmsg,termlen,0);        	} while( !IsLast( P, L ) );		PrintList( L );		/*if( IsEmpty( L ) ){			L = MakeEmpty( NULL );			P = Header( L );		}*/		pthread_mutex_unlock(&mutex);		printf("mutex DELETE unlock \n");		close(ts_fd);		 break;	 }	strcpy(msg,usrname);	strp=msg;	strp=strp+(strlen(msg));	strcpy(strp,dpchar);	strp+=2; // move pointer 2 forward because dpchar contains ": "	strcpy(strp,buffer);	msglen=strlen(msg);	//if(send(ts_fd,msg,msglen,0)>0) 	printf("msg -%s- send\n",msg);	/* send msg to all clients: */	pthread_mutex_lock(&mutex);	printf("mutex lock aquired for SEND\n");	Position P = Header( L );        do{            P = Advance( P );            sfd = Retrieve( P ); //read from list!			//if(sfd != ts_fd)			send(sfd,msg,msglen,0);        } while( !IsLast( P, L ) );	PrintList( L );	pthread_mutex_unlock(&mutex);	printf("mutex SEND unlock\n");   };     return 0;}/*	Is the linked list a CRITICAL SECTION indeed?	Do we need to protect the linked list with MUTEX, CONDVAR or Semaphores ?*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美国产午夜精品| 另类小说色综合网站| 久久人人超碰精品| 日韩一区二区在线看| 欧美伦理影视网| 欧美欧美午夜aⅴ在线观看| 欧美性色综合网| 欧美老肥妇做.爰bbww视频| 欧美三级日本三级少妇99| 91官网在线观看| 欧美精品自拍偷拍| 欧美一个色资源| 精品国产乱码久久久久久久久 | 色狠狠一区二区三区香蕉| av男人天堂一区| 欧美写真视频网站| 一区二区中文字幕在线| 亚洲免费视频中文字幕| 亚洲国产精品嫩草影院| 久久不见久久见免费视频7| 国产一区二区三区蝌蚪| 成人黄色在线网站| 欧美影片第一页| 精品对白一区国产伦| 国产精品午夜免费| 午夜影院久久久| 国产麻豆一精品一av一免费 | 6080亚洲精品一区二区| 日韩你懂的电影在线观看| 久久久久国产精品厨房| 亚洲精品免费电影| 奇米影视在线99精品| av一区二区不卡| 91精品午夜视频| 国产精品乱码一区二区三区软件 | 国产亚洲一区字幕| 亚洲综合色区另类av| 九九**精品视频免费播放| 顶级嫩模精品视频在线看| 欧美三级在线视频| 中文字幕免费在线观看视频一区| 一区二区三区中文在线观看| 国产真实乱对白精彩久久| 欧美亚洲免费在线一区| 久久久久久久久伊人| 亚洲va韩国va欧美va精品| 国产精品一区二区免费不卡 | av中文一区二区三区| 这里是久久伊人| 亚洲日本一区二区| 精品一区二区三区在线播放视频 | 欧美日韩另类一区| 亚洲国产精品成人综合| 免费观看在线综合色| 在线视频国内自拍亚洲视频| 久久久久久久久久久久久女国产乱| 亚洲一区免费在线观看| 成人h动漫精品一区二区| 日韩视频在线永久播放| 亚洲综合色网站| 91视频国产资源| 中文字幕久久午夜不卡| 久久 天天综合| 日韩欧美的一区二区| 琪琪一区二区三区| 欧美精品一卡二卡| 亚洲午夜久久久久久久久电影网 | 亚洲视频 欧洲视频| 国产成人免费在线观看不卡| 欧美丰满美乳xxx高潮www| 亚洲精品成人悠悠色影视| 99riav久久精品riav| 国产精品婷婷午夜在线观看| 国产盗摄一区二区三区| 久久婷婷一区二区三区| 国产一区二区三区四区五区美女| 91精品国产品国语在线不卡| 亚洲成av人片| 51精品秘密在线观看| 日本在线播放一区二区三区| 91精品国产手机| 九九精品视频在线看| 精品区一区二区| 狠狠色丁香婷婷综合| 国产亚洲精品bt天堂精选| 国产福利91精品一区二区三区| 国产亚洲精品免费| 99视频超级精品| 亚洲一区二区三区精品在线| 欧美日韩在线一区二区| 蜜桃av噜噜一区| 久久久久九九视频| 丁香婷婷综合网| 亚洲自拍另类综合| 欧美一区二区女人| 国产传媒久久文化传媒| 亚洲色图在线看| 91精品啪在线观看国产60岁| 国产呦萝稀缺另类资源| 最新不卡av在线| 欧美裸体bbwbbwbbw| 国产福利一区二区三区| 一区二区三区欧美日韩| 欧美一区二区三区精品| 国产福利91精品一区二区三区| 亚洲人成网站在线| 欧美成人免费网站| 99视频一区二区| 久久99精品国产麻豆不卡| 中文字幕亚洲一区二区av在线| 欧美日韩国产bt| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 99国产精品久久久久久久久久| 午夜一区二区三区在线观看| 欧美精品一区二区久久久| 色综合天天综合网国产成人综合天 | 中文字幕欧美激情一区| 欧美体内she精高潮| 国产乱一区二区| 亚洲影院在线观看| 久久精品夜色噜噜亚洲aⅴ| 色综合久久99| 国产精品99久久久久久久vr| 日韩国产高清在线| 高清国产一区二区| 综合分类小说区另类春色亚洲小说欧美| 婷婷成人综合网| 国产日韩欧美麻豆| 欧美精选一区二区| 91丝袜美腿高跟国产极品老师| 三级一区在线视频先锋| 国产精品久久久久7777按摩| 在线电影国产精品| 91浏览器在线视频| 国产福利91精品一区二区三区| 日韩国产在线一| 亚洲一区二区三区中文字幕| 国产精品视频一二三区| 精品播放一区二区| 欧美一区二区三区免费视频| 欧美视频自拍偷拍| 色菇凉天天综合网| 波多野结衣在线aⅴ中文字幕不卡| 捆绑调教美女网站视频一区| 日日骚欧美日韩| 精品国产污污免费网站入口 | 91精品欧美福利在线观看| 粉嫩久久99精品久久久久久夜| 六月丁香婷婷色狠狠久久| 亚洲综合成人在线| 亚洲一区二区三区四区在线| 亚洲色大成网站www久久九九| 中文字幕第一页久久| 国产日产欧美一区二区三区| 精品国产凹凸成av人导航| 精品国产91久久久久久久妲己| 日韩一区二区精品| 91精品在线观看入口| 欧美一级二级三级蜜桃| 欧美一级二级三级乱码| 欧美tickling挠脚心丨vk| 日韩亚洲电影在线| 精品国产免费一区二区三区四区| 日韩欧美一区二区不卡| 久久尤物电影视频在线观看| 欧美精品一区二区高清在线观看| 精品国产免费人成电影在线观看四季 | 亚洲综合免费观看高清完整版 | 国产91精品免费| 成人va在线观看| 欧美视频日韩视频| 制服丝袜在线91| 久久亚洲综合色一区二区三区| 久久久亚洲欧洲日产国码αv| 国产精品国模大尺度视频| 亚洲精品久久久蜜桃| 日韩精品成人一区二区三区 | 国产经典欧美精品| 99在线精品观看| 国产精品传媒在线| 亚洲成人午夜电影| 激情久久五月天| 99re66热这里只有精品3直播| 91九色02白丝porn| 日韩一区二区三区在线| 欧美激情综合五月色丁香小说| 亚洲日穴在线视频| 青青草原综合久久大伊人精品 | 欧美影视一区二区三区| 欧美xxx久久| 一区二区三区久久久| 久久国产精品一区二区| 成人av网站在线观看| 欧美一级在线免费| 中文字幕一区二区三区四区不卡 | 成人网在线播放| 欧美放荡的少妇| 中文字幕一区二区三区在线不卡| 日韩精品一级中文字幕精品视频免费观看 | 宅男噜噜噜66一区二区66|