/*封裝tcpsocket類,向外提供更加輕便的tcp套接字介面
* 1.建立套接字 socket()
* 2.繫結位址資訊 bind(std::string &ip,uint16_t port)
* 3.服務端開始監聽,客戶端向服務端發起連線請求
listen(int backlog=5) connet(std::string& server_ip,uint16_t server_port)
* 4.服務端獲取已完成連線的客戶端新socket
accept(tcpsocket &clientsock,std::string &client_ip,uint16_t port)
* 5.接受資料 recv(std::string& buf)
* 6.傳送資料 send(std::string& buf)
* 7.關閉套接字 close()
* */
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define check_ret(q) if(q==false)
class
tcpsocket
~tcpsocket()
bool
socket()
return
true;}
bool
bind
(std::string &ip,
uint16_t port)
return
true;}
bool
listen
(int backlog=5)
return
true;}
bool
accept
(tcpsocket &client,std::string &client_ip,
uint16_t
&client_port)
client.
setfd
(sockfd)
; client_ip=
inet_ntoa
(addr.sin_addr)
; client_port=
ntohs
(addr.sin_port)
;return
true;}
void
setfd
(int sockfd)
bool
connect
(std::string &server_ip,
uint16_t server_port)
return
true;}
bool
recv
(std::string &buf)
else
if(ret==0)
buf.
assign
(tmp,ret)
;return
true;}
bool
send
(std::string &buf)
return
true;}
bool
close()
private
:int _sockfd;};
intmain()
/*基於封裝的tcpsocket,實現tcp服務端程式
* 1.建立套接字
* 2.為套接字繫結資訊
* 3.開始監聽
* while(1)
* * 7.關閉套接字*/
#include
"tcpsocket.hpp"
intmain
(int argc,
char
* ar**)
std::string ip=ar**[1]
;uint16_t port=
atoi
(ar**[2]
);tcpsocket sock;
check_ret
(sock.
socket()
);check_ret
(sock.
bind
(ip,port));
check_ret
(sock.
listen()
);while(1
) std::cout<<
"new client:"
<":"
clientsock.
recv
(buf)
; std::cout<<
"client say:"
clear()
; std::cout<<
"server say:"
;fflush
(stdout);
std::cin>>buf;
clientsock.
send
(buf);}
sock.
close()
;return0;
}
/*基於封裝的tcpsocket實現tcp客戶端程式
* 1.建立套接字
* 3.向服務端發起連線請求
* while(1)
* * 6.關閉套接字*/
#include
"tcpsocket.hpp"
#include
void
sigcb
(int signo)
intmain
(int argc,
char
* ar**)
std::string ip=ar**[1]
;uint16_t port=
atoi
(ar**[2]
);signal
(sigpipe,sigcb)
; tcpsocket sock;
check_ret
(sock.
socket()
);check_ret
(sock.
connect
(ip,port));
while(1
) sock.
close()
;return0;
}
模擬實現Spring IOC
通過在類上標註 registration 註冊進容器,injection從容器注入物件 容器類 public class springcontainer else bean.setbeanclass c mappropsmap new hashmap 處理注入屬性 field props c.get...
模擬實現strcmp
函式簡介 原型 int strcmp const char s1,const char s2 所在標頭檔案 string.h 功能 比較字串s1和s2。一般形式 strcmp 字串1,字串2 說明 當s1注意不是 1 當s1 s2時,返回值 0 當s1 s2時,返回正數 注意不是1 如下 int m...
模擬實現strncat
模擬實現strncat 在系統庫函式中,存在strncat這個函式,它用於字串的追加,就是在乙個字串後面再追加乙個字串,它的函式原型為 char strncat char strdest,const char strsource,size t count 在其中,strdest為目標字串,strso...