📄 hw_tcppacket.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 + -