看標題好像有點不明白啊,兄弟?
那我稍微的解釋一下
我寫過很多個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...