linux下socket模板函式接受與傳送

2021-08-02 14:18:07 字數 3012 閱讀 2477

看標題好像有點不明白啊,兄弟?

那我稍微的解釋一下

我寫過很多個socket程式的demo,

每乙個程式要傳送什麼資料,都要改雙方的接收和傳送函式,這樣顯得太笨拙了,而且根本無法移植好嗎....

後面我想到了模板函式::::::::::::::::::::::::::::::::::::::::

大家都知道模板可以支援任何型別的資料作為引數

那麼我們只要把接收傳送函式做成模板不就行了,,,,,

只需要指定傳送包的型別就可以正常使用了,簡直不能太方便好嗎.

下面程式是我封裝好的乙個客服端和伺服器基類,直接繼承或者修改就可以使用了,資料報(結構體)得自己設計,基類不用做任何修改完美相容

伺服器.h:

#ifndef _my_server

#define _my_server

#include "string.h"

#include "iostream"

#include "stdio.h"

#include "fcntl.h"

#include "stdlib.h"

#include "unistd.h"

#include "sys/socket.h"

#include "sys/types.h"

#include "netinet/in.h"

#include "arpa/inet.h"

#include "signal.h"

using namespace std;

/class my_server

void set_port(int _port)

void set_lis_num(int _num)

int get_cfd()

int create_net();

int accept_cfd();

int close_net();

//利用模板函式接受任意包

template t recv()

else printf("client exit\n");

return buff; }

//利用模板函式傳送任意包

template void send(t buff) };

#endif

伺服器.cpp:

#include "my_server.h"

my_server::my_server()

my_server::~my_server()

int my_server::create_net()

saddr.sin_family=af_inet;

saddr.sin_addr.s_addr=htonl(inaddr_any);;

saddr.sin_port=htons(port);

v=bind(sfd,(struct sockaddr*)&saddr,sizeof saddr);

if(v==-1)

v=listen(sfd,listen_num);

if(v==-1)

printf("server start\n");

return 0;

}int my_server::accept_cfd()

else

printf("%d:connect ok\n",cfd);

return cfd;

}int my_server::close_net()

客服端.h

#ifndef _my_client

#define _my_client

#include "stdio.h"

#include "stdlib.h"

#include "unistd.h"

#include "string"

#include "string.h"

#include "sys/socket.h"

#include "sys/types.h"

#include "netinet/in.h"

#include "arpa/inet.h"

using namespace std;

/class my_client

void set_port(int _port)

int create_net();

template t recv()

template void send(t buff) };

#endif

客服端.cpp

#include "my_client.h"

my_client::my_client()

my_client::~my_client()

int my_client::create_net()

//初始化位址族

caddr.sin_family=af_inet;

caddr.sin_addr.s_addr=inet_addr(ip.data());

caddr.sin_port=htons(port);

//連線伺服器

v=connect(cfd,(struct sockaddr*)&caddr,sizeof caddr);

if(v==-1)

else printf("connect server ok\n");

return 0;

}

服務端測試.cpp

#include "my_server.h"

struct data

buff;

int n;

int main()

客服端除錯.cpp

#include "my_client.h"

struct data

buff,buff1;

int main()

linux下socket程式設計

一 什麼是socket socket可以看成是使用者程序與核心網路協議棧的程式設計介面。socket不僅可以用於本機的程序間通訊,還可以用於網路上不同主機的程序間通訊。socket api是一層抽象的網路程式設計介面,適用於各種底層網路協議,如ipv4 ipv6。struct sockaddr in...

linux下socket程式設計

作為乙個嵌入式開發者,在實際的研發專案中,常常需要編寫socket網路程式設計介面,提供給軟體開發人員。下面將提供乙個常用的 模板 客戶端的功能可以用微控制器多功能除錯助手進行驗證 include include include include include include include def...

linux下socket程式設計

簡單的linux下socket程式設計,分別基於tcp和udp協議實現的簡單程式 linux下socket程式設計可以概括為以下幾個函式的運用 流程 將套接字繫結到伺服器的網路位址上 if bind server sockfd,struct sockaddr my addr,sizeof struc...