c++**,tcp協議實現區域網聊天系統(長鏈結),有日誌的列印,實現登入註冊以及單發資訊和**資訊功能,工作業餘時間所寫,附上github位址裡面有readme說明檔案
說明:登入註冊時客戶端將使用者輸入的資訊傳送給伺服器讓伺服器進行處理,客戶端通訊時為客戶端先將資訊傳送給伺服器,然後讓伺服器**
由於**檔案過多**過長,下面僅展示伺服器和客戶端**,整個工程**請在以上github位址自取
bool server::selectclient()
//如果該套接字在此集合內則進行accept操作,並建立客戶端鍊錶
if(fd_isset(msocketfd, &mreadset))
log(tag, "client ip = ", inet_ntoa(msaddr.sin_addr));
log(tag, "client port = ", ntohs(msaddr.sin_port));
//將accept返回的描述符加入集合
fd_set(macceptfd, &mset);
if(mmaxfd < macceptfd)
//以頭插法建立客戶端鍊錶
mnode = (clientnode *)malloc(sizeof(clientnode));
if(!mnode)
mnode->fd = macceptfd;
mnode->caddr = mcaddr;
mnode->next = mhead;
mhead = mnode;
}//遍歷客戶端鍊錶
for(mnode = mhead ; mnode != null; mnode = mnode->next)
//開始讀取客戶端資訊,拆包判斷
package pack;
result = read(mtempfd, &pack, sizeof(package));
if(result < 0)//此時移除下線節點
else if(result == 0)//此時移除下線節點
int online = 0;
bool isbreak = false;
switch(pack.type)
log(tag, "read your name = ", mregistinfo.name);
log(tag, "read telphone = ", mregistinfo.telphone);
log(tag, "read password = ", mregistinfo.password);
log(tag, "and your id is : ", mtempfd);
mregistinfo.id = mtempfd;
if(mstorage)
else
}else
break;
case login://當包頭表示登入資訊時
result = read(mtempfd, &mlogininfo, sizeof(logininfo));
if(result < 0)
log(tag, "login username = ", mlogininfo.name);
log(tag, "login password = ", mlogininfo.password);
if(mstorage)
else//登入失敗
}else
break;
result = read(mtempfd, &online, sizeof(int));
if(result < 0)
else
break;
case message://先接收資訊在**
dealmessage();
break;
case zero:
isbreak = true;
break;
}if(isbreak)
}
}return true;
}
connect函式">bool client::init()
msaddr.sin_family = af_inet;
msaddr.sin_port = htons(mport);
msaddr.sin_addr.s_addr = inet_addr(mip);
log(tag, "connect ...");
result = connect(msocketfd, (sockaddr *)&msaddr, (socklen_t)sizeof(msaddr));
if(result < 0)
return true;
}void client::deinit()
void client::setipandport()
else
log(tag, "當前連線的ipv4 = ", mip);
log(tag, "當前連線的port = ", mport);
關於EeePc的Linux下安裝GCC編譯器
最近由於需要,把幾年前 有點誇張 的eeepc 1000拿出來,想在它自帶的linux系統下進行程式設計。誰知道居然沒有gcc編譯器,所以原始碼安裝肯定是不行的啦。後來在終端 ctrl alt t 裡輸入 sudo apt get install gcc 發現支援apt get安裝軟體,只不過沒找到...
linux下gcc編輯器使用
gcc是乙個c語言編譯器,全程為gnu c compiler的英文縮寫。gcc具有交叉編譯功能,即在乙個平台下編譯另乙個平台的 gcc支援的字尾名解釋 c c語言源 檔案 a 有目標構成的檔案庫檔案,靜態庫檔案 c cc 或 cxx c 源 檔案 h 程式所包含的標頭檔案 i 已經與處理過的c原始碼...
Linux下vim編輯去掉 M
前言 最近有個檔案需要放到伺服器上執行,檔案是在本地系統 windows下編寫的,伺服器是linux系統。一開始用vim開啟看不出什麼問題,但是一執行就報錯,這是因為檔案的每一行末尾都有 m,怎麼產生的我們不深究,總之是平台問題。解決辦法 如果沒有設定fileformat,vim是無法看到 m的,在...