[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 病歷號 病人 姓名 腎病症...