91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 278KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-03
  • 語言: C/C++
  • 標簽: 基于Linux??多線程??

資源簡介

用C語言編程實現linux簡單的聊天室功能。 ? 用戶程序命名為client.c;服務器程序命名為server.c ? 綁定端口等信息見實驗方法內容; ? 要求client可以通過socket連接server ? 在client,提示輸入服務器ip ? 若連接server 的socket建立成功,返回提示信息 ? Client輸入的聊天內容在client端(多個client端)和server端同時顯示; ? 多個client可同時接入server,進入聊天室,最多支持20個client; ? Client端輸入quit退出連接,server端提示client退出。 ? 可選擇使用多線程實現多客戶端;

資源截圖

代碼片段和文件信息

/*******?服務器程序(server.c)?************/

#include?

#include?

#include?

#include?

#include?

#include?

#include?

#include?

//#include?
typedef?unsigned?long?int?pthread_t;




#define?MAXLINE?1000//在一條消息中最大的輸出字符數

#define?LISTENQ?20//最大監聽隊列

#define?PORT?5000//監聽端口

#define?MAXFD?20//最大的在線用戶數量

void?*get_client(void?*);

int??sockfdi;

static?int??maxi=0;//maxi表示當前client數組中最大的用戶的i值

static?int??client[MAXFD];

void?recvandsend(void)//監聽轉發線程入口函數

{

int??index=0;

int??nbytes=0;

char?buffer[1024];

?int??len;

?int?outindex=0;

?while(1)

?{

if(maxi>0)

{

??memset(buffer0sizeof(buffer));

??nbytes=0;???

??//index++;?

??nbytes=read(client[index++]buffersizeof(buffer));

//??printf(“%d%d\n“indexclient[index]);?

??if(nbytes>0)
??{

???buffer[nbytes]=‘\0‘;

???printf(“%s\n“buffer);

???outindex=0;

???while(outindex {
?????if(write(client[outindex++]buffersizeof(buffer))==-1)
?????{
??????fprintf(stderr“WriteError:%s\n“strerror(errno));
??????exit(1);
?????}
}
??}

?}

?if(index>=maxi)
index=0;
?}
?pthread_exit(NULL);

}

?

int??main(int??argc?char??*argv[])
{

//??int?client_fd[LISTENQ]clientnum=0;;

?struct?sockaddr_in?server_addr;

?struct?sockaddr_in?client_addr;

?int?sin_sizeportnumber;

?char?hello[]=“Hello!?Are?You?Fine?\n“;

?int???thr_id;??/*?thread?ID?for?the?newly?createdthread?*/

?pthread_t??p_thread;?/*?thread‘s?struct?ure??*/

?int??new_fd=0;

?memset(client0sizeof(client));

?if(argc!=1)
?{

?fprintf(stderr“Usage:%sportnumber\a\n“argv[0]);

?exit(1);

?}

?

?/*?服務器端開始建立?socket?描述符?*/

?if((sockfd=socket(AF_INETSOCK_STREAM0))==-1)

?{

?fprintf(stderr“Socketerror:%s\n\a“strerror(errno));

?exit(1);

?}

?/*?服務器端填充?sockaddr?結構?*/

?bzero(&server_addrsizeof(struct?sockaddr_in));

?server_addr.sin_family=AF_INET;

?server_addr.sin_addr.s_addr=htonl(INADDR_ANY);

?server_addr.sin_port=htons(PORT);

?/*?捆綁?sockfd?描述符?*/

?if(bind(sockfd(struct?sockaddr?*)(&server_addr)sizeof(struct??sockaddr))==-1)

?{

?fprintf(stderr“Binderror:%s\n\a“strerror(errno));

?exit(1);

?}

?printf(“服務器監聽端口%d...\n“PORT);

?/*?監聽?sockfd?描述符?*/

?if(listen(sockfdLISTENQ)==-1)

?{

?fprintf(stderr“Listenerror:%s\n\a“strerror(errno));

?exit(1);

?}

?thr_id?=pthread_create(&p_thread?NULL?recvandsend?NULL);

?printf(“歡迎來到本聊天室\n“);

?while(1)

?{

?/*?服務器阻塞直到客戶程序建立連接?*/

?if(maxi>=20)

?{

??printf(“以達到人數上線\n“);

??continue;

?}

?sin_size=sizeof(struct?sockaddr_in);

?if((new_fd=accept(sockfd(struct?sockaddr?*)(&client_addr)&sin_size))==-1)

?{

??fprintf(stderr“Accepterror:%s\n\a“strerror(errno));

??exit(1);

?}

?/*fprintf(stderr“Serverget?connection?from?%s\n“inet_ntoa(client_addr.sin_a

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2020-05-07?21:37??LTS\
?????目錄???????????0??2020-05-07?21:36??LTS\fwq\
?????文件??????????79??2020-05-07?21:36??LTS\fwq\Makefile
?????文件????????3389??2020-05-07?21:36??LTS\fwq\server.c
?????文件???????13472??2020-05-07?21:36??LTS\fwq\weserver
?????目錄???????????0??2020-05-07?21:36??LTS\khd\
?????文件????????2587??2020-05-07?21:36??LTS\khd\client.c
?????文件??????????78??2020-05-07?21:36??LTS\khd\Makefile
?????文件???????13512??2020-05-07?21:36??LTS\khd\weclient
?????文件??????295453??2020-05-07?21:33??LTS\聊天室大作業.docx

評論

共有 條評論