吳曉培 2012 6 21 C S 單播 執行緒

2021-07-10 20:39:22 字數 4647 閱讀 2655

[root@bogon ~]# gedit

server.c

/* server.c */

/* server.c */

#include

#include

#include

#include

#include "wrap.h"

#define maxline 80

#define serv_port 8000

char buf[maxline];

int  client[fd_setsize];

int i;

int maxi;

int doit(char *var, char *vbr);

int main(int argc, char **argv)

if (i == fd_setsize)

fd_set(connfd, &allset);

if (connfd > maxfd)

maxfd = connfd;

if (i > maxi)

maxi = i;

if (--nready == 0)//若--nready為0,則表示當前的套接字描述符集中只有listenfd這個監聽的描述符,沒有客戶端的資料請求埠,則進行下一輪的select迴圈;

continue;//繼續執行for迴圈,查詢資料請求的客戶端

}

for (i = 0; i <= maxi; i++) else

lable1:    if (fd_isset(sockfd, &rset)) else     goto lable1;

}

}

if(strstr(buf,dbuf)==null)

//用來判斷客戶端輸入的是使用者名稱還是資訊!查詢buf中是否含有dbuf,我覺的這個用的不好,但是一時也沒想開咋該。

//將客戶端輸入的資訊迴圈寫入

}else

}

}   

}

if (--nready == 0)

break;

}

}

}

}

int doit(char *var, char *vbr)        //函式用來比較sookset1[j]和buf是否相等,此時sookset1[j]相當於一維字串陣列

elseelse

}       

}   

}

return 1;

}

[root@bogon ~]# gedit client.c

/* client.c */

#include

#include

#include

#include

#include "wrap.h"

#define maxline 80

#define serv_port 8000

void *doit(void *arg);

int main(int argc, char *argv)

strcpy(buf,argv[1]);  //將argv[1]裡的資料複製到buf中!buf用於存放客戶端與伺服器端互動時的資料;   

bzero(&servaddr, sizeof(servaddr));//首先將servaddr結構體清零;

servaddr.sin_family = af_inet;

inet_pton(af_inet, "127.0.0.1", &servaddr.sin_addr);

servaddr.sin_port = htons(serv_port);

connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));//與伺服器建立鏈結;

printf("請輸入使用者名稱形如***--***\n");

printf("請勿輸入重複的使用者名稱!傳送資訊時請輸入要傳送的使用者名稱+您要輸入的資訊!\n");

printf("如果輸入重複的使用者名稱!請重新開啟視窗!\n");

printf("請輸入esc退出程式!\n");

printf("當前登入使用者是%s\n",buf);

write(sockfd,buf,maxline);  //把buf裡的資訊寫到sockfd檔案描述符裡

memset(buf,0,maxline);

while(1)

sleep(3); //主線程睡3秒

return 0;

}

void *doit(void *arg)  //執行緒函式

else

write(conut, buf, strlen(buf));  //把buf中的資料寫到socked檔案描述符對應的共享區域!

}

}

}

[root@bogon ~]#

gedit wrap.h

#include

#include

#include

void perr_exit(const char *s)

int accept(int fd, struct sockaddr *sa, socklen_t * salenptr)

return n;

}

void bind(int fd, const struct sockaddr *sa, socklen_t salen)

void connect(int fd, const struct sockaddr *sa, socklen_t salen)

void listen(int fd, int backlog)

int socket(int family, int type, int protocol)

ssize_t read(int fd, void *ptr, size_t nbytes)

return n;

}

ssize_t write(int fd, const void *ptr, size_t nbytes)

return n;

}

void close(int fd)

ssize_t readn(int fd, void *vptr, size_t n)

else if (nread == 0)

break;

nleft -= nread;

ptr += nread;

}

return n - nleft;

}

ssize_t writen(int fd, const void *vptr, size_t n)

nleft -= nwritten;

ptr += nwritten;

}

return n;

}

static ssize_t my_read(int fd, char *ptr)

else if (read_cnt == 0)

return 0;

read_ptr = read_buf;

}

read_cnt--;

*ptr = *read_ptr++;

return 1;

}

ssize_t readline(int fd, void *vptr, size_t maxlen)

else if (rc == 0) else

return -1;

}

*ptr = 0;

return n;

}

執行過程:

執行過程:

[root@localhost 單播]# ./clie wxp    //客戶端一

請輸入使用者名稱形如***--***

請勿輸入重複的使用者名稱!傳送資訊時請輸入要傳送的使用者名稱+您要輸入的資訊!

如果輸入重複的使用者名稱!請重新開啟視窗!

請輸入esc退出程式!

當前登入使用者是wxp

wxp--已登入!

------------------------

wxp--已登入!

------------------------

zls--已登入!

------------------------

zls--老師您好

[root@localhost 單播]# ./clie zls         //客戶端二

請輸入使用者名稱形如***--***

請勿輸入重複的使用者名稱!傳送資訊時請輸入要傳送的使用者名稱+您要輸入的資訊!

如果輸入重複的使用者名稱!請重新開啟視窗!

請輸入esc退出程式!

當前登入使用者是zls

wxp--已登入!

------------------------

zls--已登入!

------------------------

zls--老師您好!

------------------------

0 給主人留下些什麼吧!~~

小公尺管培面試經歷

今天下午去小公尺麵試管培,經歷了史上感覺最不好的一次群面,總結一下後面再接再厲。面試形式 3分鐘自我介紹 中英文均可 隨機抽取問題英文回答 我們那組中有乙個清華大神乙個北大大神,英語非常流利,我的1 2分鐘英文介紹的內容和他們說的資訊量完全不是乙個數量級的。她們回答會提也說的非常棒。之前經歷過一次i...

從羅永浩打臉到吳曉波翻車

吳曉波直播帶貨被指出交易慘淡翻車,他寫了一篇自我說明的文章,我覺得還是寫的不錯的,當然,老讀者應該懂我的意思,通常我說寫的不錯,並不代表我贊同他的內容,而是在第三方視角來看,作為危機公關而言,這篇文章還是很有質量的 吳曉波 十五罐 第一,這篇文章他沒有反駁那些關於他翻車的文字,沒有狡辯,而是坦白說確...

規培手冊填寫模板 腎內科 規培輪轉登記手冊模板

晉城市人民醫院 住院醫師規範化培訓考核表 專業基地 姓 名 學 號畢業時間 學 位 輪轉時間 要求完成的病種 數量和技能 病 種 基本技能 掌握 建議完成例數 要求完成例數 實際完成例數 實際 完成例數 帶教簽字 注 如專案需要增加的可以自行增加行數 完成的病種和數量 1 病歷號 病人 姓名 腎病症...