TCP模擬實現

2021-09-27 11:53:14 字數 3312 閱讀 6903

/*封裝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...