⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hw_tcppacket.cpp

📁 tcp socket api,we can use it establish a connection or exchange data or save files.
💻 CPP
字号:
/* 
int
 Socket(int family, int type, int protocol)
 {
     int     n;

    if ( (n = socket(family, type, protocol)) < 0)
         err_sys("socket error");
     return (n);
 }
*/
#include <netinet/in.h>//IPv4 Socket Address Structure
#include <sys/socket.h>//socket() Function
#include <unistd.h>//fork();close();
//////////////////////////////
#include <cstdlib>
#include <sys/types.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <cerrno>
#include <iostream>
///////////////////////////////////////

#define BACKLOG 10;
TcpPack::TcpPack()
{
//不知道这个怎么写
}

TcpPack::~TcpPack()
{
//这个也不知道
}
//TcpPack::ServInit(char* serv_ip, char* serv_port)本来这么写,但改为无参形式
//这个函数用于初始化server,包括socket(),bind(),listen();
int TcpPack::ServInit()
{

	//int socket (int family, int type, int protocol);
	

	if((sockfd_s=socket (AF_INET, SOCK_STREAM, 0))<0)//三个参数全部是定值
	{
 
		err_sys("socket error");
     
		exit(1);
	
	}

	//初始化socket地址

	//int bind (int sockfd, const struct sockaddr *myaddr, socklen_t addrlen);

	servaddr.sin_family = AF_INET;//类型
	servaddr.sin_port = 0;//端口号=0,表示由kernel指定
	servaddr.sin_addr.s_addr = htonl(INADDR_ANY) ;//任意

    socklen_t len = sizeof(servaddr)
    bzero(&servaddr, sizeof(servaddr));//使用socket地址之前一定要清0;
//将socket绑到一个地址上,在server端,这个地址以及端口号都交由kernel指定;
	if( (int bn = bind (sockfd_s, (struct sockaddr*)&servaddr, len) <0)
	{

		err_sys("socket error");
    
		return (bn);

	}

 
	//int listen (int sockfd, int backlog);
 
	if((int ln = listen (sockfd, BACKLOG))<0)
 
	{
 
		err_sys ("listen error");
	 
		return (ln);

 	}
//这里会显示一下server被分配到的ip地址和端口号
//int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t *addrlen);


	if( (getsockname(sockfd_s, (struct sockaddr*)&tempaddr, &len))<0)
	{
	
		err_sys(" getsockname() error ");
		return (-1);
	}

/*
const char *inet_ntop(int af, const void *src, char *dst, size_t cnt);
     Return pointer to result or NULL on error
*/
	//const inet_ntop(AF_INET, ip_str, &tempaddr.sin_addr);

	cout<<" the address we are listening is: "<<ntohl(tempaddr.sinport)<<endl;


//

	return 0;


}

//client端初始化函数只有socket();
int TcpPack:: ClieInit()
{
	if((sockfd_c=socket (AF_INET, SOCK_STREAM, 0))<0)//三个参数全部是定值
	{
 
		err_sys("socket error");
     
		exit(1);
	
	}



}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -